snaqme Engineers Blog

おやつ体験メーカー snaq.me エンジニアによる開発プロダクトブログ

CloudWatch Agent で procstat プラグインを使った EC2 のプロセス監視を設定する

こんにちは! SRE を担当している多田です(@tada_infra).

CloudWatch Agent は EC2 から CPU,メモリなどのメトリクスをとったり,CloudWatch Logs にログを出力できますし,AWS Compute Optimizer を有効活用するためにも役立てることができます.今回は,procstat プラグインを使って Nginx のプロセス監視できるように CloudWatch メトリクスに送る検証をしました.多くの方が CloudWatch Agent でのプロセス監視設定を記事にされているのですが,自分も試してみたため記事にします.

CloudWatch Agent の導入

予め CloudWatchAgentServerPolicy をアタッチした IAM ロールを適用した Amazon Linux 2 の環境に CloudWatch Agent を導入します.

sudo yum install amazon-cloudwatch-agent

プロセス数を設定ファイルを編集する

手動で設定ファイルを定義し,CloudWatch メトリクスをおくります.

docs.aws.amazon.com

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.jsonを編集してきます.

{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "nginx",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

編集後,CloudWatch Agent に設定ファイルを読み込ませます./opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.tomlinputs.procstat セクションが追加されていて,CloudWatch Agent が起動できていれば CloudWatch メトリクスに送れているはずなので確認してきます.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl  -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s

/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp
Start configuration validation...
/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
2020/11/26 23:02:31 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp ...
Valid Json input schema.
I! Detecting runasuser...
No csm configuration found.
No log configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service
Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service
$ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
~中略~
[inputs]

  [[inputs.procstat]]
    exe = "nginx"
    fieldpass = ["pid_count"]
    interval = "60s"
    pid_finder = "native"
    tagexclude = ["user", "result"]
    [inputs.procstat.tags]
      metricPath = "metrics"
~中略~
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2020-11-26T23:02:31+0000",
  "version": "1.247345.35"
}

CloudWatch メトリクスにプロセスが取れているかの確認

CWAgentexe,host,pid_finder というメトリクス(プロセスに関連付けられたプロセス ID の数)が追加されてました.意図的に nginx を停止,再度起動してグラフが上がっていくのを確認できました.

f:id:sadayoshi_tada:20201127081621p:plain f:id:sadayoshi_tada:20201127081739p:plain

まとめ

CloudWatch Agent の procstat プラグインでのプロセス監視できるよう設定を行いました.設定は簡単にできたので別サーバーへの横展開していく時にも活用していきたいと思います.

元記事

元記事はこちらです.

JAWS-UG 朝会 #15 で『AWS Organizations と一緒にはじめるアカウント分離』の取り組みを発表した

みなさん、はじめまして!

スナックミー で SRE を担当している多田です(@tada_infra).スナックミー のエンジニアによるブログが誕生しました! 今後記事で情報発信をしていくのでブログ購読をしてもらえると嬉しいです🙌

スナックミー のエンジニアブログ1発目としてこの記事では 11/18 にJAWS-UG 朝会 #15 にて「AWS Organizations と一緒にはじめるアカウント分離」と題して登壇させていただいたので,登壇資料と登壇を振り返っていきます.

jawsug-asa.connpass.com

登壇資料

登壇資料はこちらです.

今回の登壇の振り返り

今回の発表では現在取り組んでいるアカウントを用途ごとに分離していく活動の模様を発表させてもらいました.入社してからアカウントが1つしかない状況を見て感じた課題からアカウントを用途ごとに分離していっており,アカウント分離にあたっては Landing Zone の考え方を参考にさせてもらって AWS Organizations でアカウント管理をしはじめています.

aws.amazon.com

AWS Organizations と AWS SSO を組み合わせた形でログインしてもらうこともこれまでは直ログインになっているところから変更していきたいですし,他の業務で使っているアプリケーションも AWS SSO と連携できるところも良いなと思っており,社内全体で使えるようにしていきたいと考えてます.今後のアカウントを増やしていく時も引き続き Landing Zone の考え方を参考に分離しつつ,ガードレール機能も設定していきます.

まとめ

AWS Organizations を使ってアカウント分離をしはじめた話を発表させてもらいました.AWS の活用を今後も広げていくとアカウントの数も増えてくるので,AWS Organizations を軸に管理手法とルール作りをやっていきたいと思います.JAWS-UG に参加するのが久々でしたが現場感のある話を聞けて楽しかったですし,また機会作って参加しきます😌

他の方の勉強会参加記事

omuron.hateblo.jp

元記事

元記事はこちらです.