CloudWatch Logsエージェントの中身を(途中まで)調べてみた

CloudWatch Logs連投です。
CloudWatch Logsエージェントの中身が気になったので、調べてみました。


ファイル構造

こんなんなってました。

# tree /var/awslogs/ -L 2
/var/awslogs/
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate_this.py
│   ├── aws
│   ├── aws.cmd
│   ├── aws_completer
│   ├── awslogs-agent-launcher.sh
│   ├── awslogs-nanny.sh
│   ├── aws_zsh_completer.sh
│   ├── easy_install
│   ├── easy_install-2.6
│   ├── jp
│   ├── pip
│   ├── pip2
│   ├── pip2.6
│   ├── pyrsa-decrypt
│   ├── pyrsa-decrypt-bigfile
│   ├── pyrsa-encrypt
│   ├── pyrsa-encrypt-bigfile
│   ├── pyrsa-keygen
│   ├── pyrsa-priv2pub
│   ├── pyrsa-sign
│   ├── pyrsa-verify
│   ├── python -> python2.6
│   ├── python2 -> python2.6
│   ├── python2.6
│   ├── rst2html.py
│   ├── rst2latex.py
│   ├── rst2man.py
│   ├── rst2odt_prepstyles.py
│   ├── rst2odt.py
│   ├── rst2pseudoxml.py
│   ├── rst2s5.py
│   ├── rst2xetex.py
│   ├── rst2xml.py
│   └── rstpep2html.py
├── etc
│   ├── aws.conf
│   └── awslogs.conf
├── include
│   └── python2.6 -> /usr/include/python2.6
├── lib
│   └── python2.6
├── lib64 -> lib
└── state
    ├── agent-state
    ├── awslogs.lock
    └── awslogs.pid

これくらの規模なら把握できそうです。


/etc/init.d/awslogs

CloudWatch Logsエージェントをインストールすると、サービススクリプトが/etc/init.d/awslogsとして配置されます。

#!/bin/sh

### BEGIN INIT INFO
# Provides:          awslogs
# Required-Start:    networking
# Required-Stop:     networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemon for AWSLogs agent.
# Description:       This script is responsible for running AWSLogs agent
#                    as a daemon.
### END INIT INFO

CONFIG_FILE=/var/awslogs/etc/awslogs.conf
DAEMON=/var/awslogs/bin/awslogs-agent-launcher.sh
DAEMON_NAME=awslogs

DAEMON_USER=root
PIDFILE=/var/awslogs/state/awslogs.pid
LOCKFILE=/var/awslogs/state/awslogs.lock

START_CMD="start-stop-daemon --start --background --pidfile $PIDFILE --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON"
STATUS_CMD="status_of_proc -p $PIDFILE "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?"

(以下省略)

デーモンは/var/awslogs/bin/awslogs-agent-launcher.shのようです。


/var/awslogs/bin/awslogs-agent-launcher.sh

デーモンは下記の4行。

#!/bin/sh
echo -n $$ > /var/awslogs/state/awslogs.pid
/usr/bin/env -i AWS_DEFAULT_REGION=us-east-1 AWS_CONFIG_FILE=/var/awslogs/etc/aws.conf HOME=$HOME /bin/nice -n 4 /var/awslogs/bin/aws logs push --config-file /var/awslogs/etc/awslogs.conf >> /var/log/awslogs.log 2>&1

/var/awslogs/bin/awsを呼んでいることがわかります。

$ /var/awslogs/bin/aws logs

これ、AWS CLIですね。

CloudWatch Logsエージェント自体のログは/var/log/awslogs.logに出力されていることがわかります。
ちなみに、/var/log/awslogs.logをCloudWatch Logsで監視すると、メッセージを登録しようとしてエラーが発生してメッセージが出力されて・・・という無限ループが発生しそうな気がします。やめといたほうがよさそうです。


/var/awslogs/bin/aws logs

AWS CLIとわかれば、help見ちゃいましょう。help。

/var/awslogs/bin/aws logs help
NAME
       logs -

DESCRIPTION
       This  is  the  Amazon CloudWatch Logs API Reference . Amazon CloudWatch
       Logs is a managed service for real  time  monitoring  and  archival  of
       application logs. This guide provides detailed information about Amazon
       CloudWatch Logs  actions,  data  types,  parameters,  and  errors.  For
       detailed  information  about  Amazon CloudWatch Logs features and their
       associated API calls, go to the Amazon CloudWatch Logs Developer  Guide
       .

       Use the following links to get started using the Amazon CloudWatch Logs
       API Reference :

       o Actions : An alphabetical list of all Amazon CloudWatch Logs actions.

       o Data Types : An alphabetical list of all Amazon CloudWatch Logs  data
         types.

       o Common Parameters : Parameters that all Query actions can use.

       o Common Errors : Client and server errors that all actions can return.

       o Regions  and  Endpoints  : Itemized regions and endpoints for all AWS
         products.

       In addition to using the Amazon CloudWatch Logs API, you can  also  use
       the  following  SDKs  and third-party libraries to access Amazon Cloud-
       Watch Logs programmatically.

       o AWS SDK for Java Documentation

       o AWS SDK for .NET Documentation

       o AWS SDK for PHP Documentation

       o AWS SDK for Ruby Documentation

       Developers in the  AWS  developer  community  also  provide  their  own
       libraries, which you can find at the following AWS developer centers:

       o AWS Java Developer Center

       o AWS PHP Developer Center

       o AWS Python Developer Center

       o AWS Ruby Developer Center

       o AWS Windows and .NET Developer Center

AVAILABLE COMMANDS
       o create-log-group

       o create-log-stream

       o delete-log-group

       o delete-log-stream

       o delete-metric-filter

       o delete-retention-policy

       o describe-log-groups

       o describe-log-streams

       o describe-metric-filters

       o get-log-events

       o help

       o put-log-events

       o put-metric-filter

       o put-retention-policy

       o test-metric-filter

だ・・・だめだ・・・眠くなってきた・・・
ということでここまでで今日はギブアップ。

コメントを残す