- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请理解我对 Docker 和 AWS 比较陌生。
目标是创建一个运行 Apache 和 PHP 以及基本 Laravel 应用程序的 AWS ECS 实例。我想运行 CloudWatch 代理以将所有日志发送到 CloudWatch(Apache 的访问和错误日志、PHP 的错误日志和 Laravel 日志)。
我知道这可能不是“最佳实践”(欢迎提供提示),但我现在的理念是“首先让它发挥作用,然后让它变得漂亮”:-)
我的 Dockerfile:
FROM amazonlinux:latest
# Update/Install
RUN yum update -y && \
# Install PHP & epel
amazon-linux-extras install -y php7.3 epel && \
# Install
yum install -y \
# Install apache
httpd \
# Install tools for CloudWatch
collectd statsd \
# Install supervisor
supervisor \
# Install cloudwatch agent
https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm && \
# Clean install data
yum clean metadata && \
yum -y clean all && \
rm -rf /var/cache/yum
# PHP Settings
RUN sed -i \
'/<Directory \"\/var\/www\/html\">/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' \
/etc/httpd/conf/httpd.conf
# Remove default html folder
RUN rm -rf /var/www/html
# Configure supervisor
COPY supervisord.conf /etc/supervisord.conf
# Configure CloudWatch agent
COPY amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# Add source to image
ADD . /var/www/aws
RUN chown -R apache:apache /var/www && ln -s /var/www/aws/public /var/www/html
# Expose port 80
EXPOSE 80
# Start supervisor
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
我的主管.conf
[supervisord]
nodaemon=true
[program:httpd]
priority=1
command=/usr/sbin/apachectl -D FOREGROUND
autorestart=true
username=apache
[program:php]
priority=2
command=/usr/sbin/php-fpm
autorestart=true
[program:cloudformation]
priority=10
command=/opt/aws/amazon-cloudwatch-agent/bin/start-amazon-cloudwatch-agent
autorestart=true
我的 cloudwatch 配置:
{
"agent": {
"metrics_collection_interval": 60,
"region": "eu-europe-1",
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"debug": false,
"run_as_user": "cwagent"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/php-fpm/www-error.log",
"log_group_name": "aws-docker",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
基本上,这可以作为运行 Laravel 应用程序的 docker 镜像正常工作。我现在遇到的唯一问题是 CloudWatch 代理。它在 ECS 中的容器上启动,但无法运行并显示以下消息:
2020/02/22 13:39:28 I! 2020/02/22 13:39:28 E! ec2metadata is not available
I! Detected the instance is OnPrem
2020/02/22 13:39:28 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json ...
Valid Json input schema.
I! Detecting runasuser...
2020/02/22 13:39:28 E! Credentials path is not set while runasuser is not root
2020/02/22 13:39:28 I! AmazonCloudWatchAgent Version 1.237768.0.
2020/02/22 13:39:28 Configuration validation first phase failed. Agent version: 1.237768.0. Verify the JSON input is only using features supported by this version.
2020/02/22 13:39:28 I! Return exit error: exit code=1
2020/02/22 13:39:28 E! Cannot translate JSON config into TOML, ERROR is exit status 1
首先,我不明白为什么显示消息 ec2metadata is not available
。该容器在 ECS 上运行,因此它应该可用(据我了解)。
第二条消息 配置验证第一阶段失败。代理版本:1.237768.0。验证 JSON 输入仅使用此版本支持的功能。
。据我所知,配置应该没问题。
我认为我的角色也还可以,因为容器确实会向 CloudWatch 发送日志。
我做错了什么?
最佳答案
以下是我如何将其打败。我们在我们的 Docker 容器中使用了一个非常轻量级的 Ubuntu 子集,它没有 systemctl
或 System V init,CloudWatch Agent 似乎是为此而设计的。您可以直接运行 start-amazon-cloudwatch-agent
(如 this answer 提到的),但它并不那么流畅。
代理想要积极管理 /opt/aws/amazon-cloudwatch-agent
树的所有者/组。 (a) 如果您以 root
身份启动它并在配置中使用 "runasuser": "cwagent"
,那么它会拒绝使用 AWS config/creds (Credentials path is not set
上面提到的),并且它保释。 (b) 如果你用 "runasuser": "cwagent"
作为 cwagent
启动它,那么它会提示说它不能改变一堆东西的所有权(甚至虽然它已经为 cwagent
所有),但它保释了。 (c) 但是,如果您以 cwagent
启动它并且不在配置中包含 "runasuser"
,它会提示,但确实如此启动并执行它的操作。
Verify the JSON input is only using features supported by this version.
消息是代理在遇到问题时所说的内容。它似乎与配置无关(这很好)。
这是我的具体情况:
# Dockerfile
ADD ./files /tmp
# [...]
RUN curl -o /tmp/amazon-cloudwatch-agent.deb 'https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb' \
&& dpkg -i /tmp/amazon-cloudwatch-agent.deb \
&& rm -f /tmp/amazon-cloudwatch-agent.deb \
&& usermod -a -G www-data cwagent \
&& chgrp -R www-data /var/log/nginx \
&& chmod g+s /var/log/nginx \
&& chown -R cwagent:cwagent /opt/aws/amazon-cloudwatch-agent \
&& install -o cwagent -g cwagent -m 700 -d /home/cwagent \
&& install -o cwagent -g cwagent -m 700 -d /home/cwagent/.aws \
&& install -o cwagent -g cwagent -m 600 /tmp/cloudwatch.config /home/cwagent/.aws/config \
&& install -o cwagent -g cwagent -m 600 /tmp/cloudwatch.credentials /home/cwagent/.aws/credentials \
&& install -o cwagent -g cwagent -m 755 /tmp/cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/default \
&& mv /tmp/99_cloudwatch.init /etc/my_init.d/
# /etc/my_init.d/99_cloudwatch.init
#!/bin/sh
su cwagent -c "nohup /opt/aws/amazon-cloudwatch-agent/bin/start-amazon-cloudwatch-agent >/tmp/cwagent.out 2>&1 &"
exit 0
// cloudwatch-agent.json
{
"agent": {
"region": "us-east-1",
"debug": false
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx/access.log",
"log_group_name": "our-app",
"log_stream_name": "nginx-access",
"timestamp_format": "[%d/%b/%Y:%H:%M:%S %z]"
},
{
"file_path": "/var/log/nginx/error.log",
"log_group_name": "our-app",
"log_stream_name": "nginx-error",
"timezone": "UTC",
"timestamp_format": "%Y/%m/%d %H:%M:%S"
}
]
}
}
}
}
关于amazon-web-services - 在 AWS ECS 上的 Docker 镜像中运行 CloudWatch 代理失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60361366/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!