Запуск агента CloudWatch в моем Docker образе на AWS сбой ECS - PullRequest
0 голосов
/ 23 февраля 2020

Поймите для этого вопроса, что я относительно новичок в Docker и AWS.

Цель состоит в том, чтобы создать один экземпляр AWS ECS, который запускает Apache и PHP с базовое c Laravel приложение. Я хочу запустить агент 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

Моя конфигурация облачных часов:

{
    "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}"
                    }
                ]
            }
        }
    }
}

В основном это прекрасно работает как docker образ, который запускает приложение Laravel. Единственная проблема, с которой я столкнулся, - это агент 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, поэтому он должен быть доступен (насколько я понимаю).

Второе сообщение Configuration validation first phase failed. Agent version: 1.237768.0. Verify the JSON input is only using features supported by this version.. Насколько я могу судить, конфиг должен быть oke.

Я думаю, что моя роль также в oke, потому что контейнер отправляет логи в CloudWatch.

Что я делаю не так?

...