ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

AWSをMackerelで監視(プラグイン利用編)

こんにちは。ソリューション技術部の松尾です。

前回のブログから2カ月ほど経ち、定期的にアップデートすると公言していたにもかかわらず、既に不定期な流れとなっており誠に恐縮です。

この2カ月で季節も流れ、ゴマサバの季節から一気にマサバの季節になろうとしています。

つまり何が言いたいかと言いますと・・・ そうです!Mackerelです!!

前回の投稿まででMackerelの利用開始~アラートが通知されるまで紹介させていただきました。 前回までのブログは以下となります!

techblog.forgevision.com
techblog.forgevision.com
今回はその第3弾ということで、かねてより記載を検討しておりましたMackerelのチェックプラグインを利用した監視について紹介させていただきます!
※前回のブログで説明させていただいている用語におきましては、説明を省かせていただきます。
※今回はLinux OSを対象とした設定となりますが、Windows OS向けの設定は別途投稿させていただきます。

チェックプラグインのインストール

チェックプラグインはMackerelAgentインストール時に標準機能として提供されていないため、MackerelAgentとは別にインストールする必要があります。

MackerelAgentがインストールされたサーバ(今回はEC2インスタンス)にログインし、以下を実行します。

$ sudo yum install mackerel-check-plugins


インストールが完了すると、以下のチェックコマンドが利用可能となります。

check-aws-cloudwatch-logs
check-aws-sqs-queue-size
check-cert-file
check-disk
check-elasticsearch
check-file-age
check-file-size
check-http
check-jmx-jolokia
check-ldap
check-load
check-log
check-mailq
check-masterha
check-memcached
check-mysql
check-ntpoffset
check-postgresql
check-procs
check-redis
check-smtp
check-solr
check-ssh
check-ssl-cert
check-tcp
check-uptime

このチェックコマンドを利用し、以前ブログで紹介した設定ファイル「/etc/mackerel-agent/mackerel-agent.conf」に設定を行うことで、MackerelAgentをインストールしただけでは監視できない項目もアラート通知できるようになります。

チェックプラグインでの監視

早速チェックプラグインを用いた設定を行っていきます。

以下の設定ファイルを編集します。

/etc/mackerel-agent/mackerel-agent.conf


デフォルトで配置されているファイルはMackerelのAPIキーのみ有効となっており、その他の設定は全てコメントアウトされています。

apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# pidfile = "/var/run/mackerel-agent.pid"
# root = "/var/lib/mackerel-agent"
# verbose = false
# apikey = ""

# [host_status]
# on_start = "working"
# on_stop  = "poweroff"
・
・
・
~~~長文の為省略~~~
・
・
・
# Plugin for munin (wrapper)
# [plugin.metrics.nfsd]
# command = "mackerel-plugin-munin -plugin=/usr/share/munin/plugins/nfsd"
# [plugin.metrics.bind9]
# command = "mackerel-plugin-munin -plugin=/etc/munin/plugins/bind9 -plugin-conf-d=/etc/munin/plugin-conf.d"
# [plugin.metrics.postfix]
# command = "MUNIN_LIBDIR=/usr/share/munin mackerel-plugin-munin -plugin=/usr/share/munin/plugins/postfix_mailqueue-name=postfix.mailqueue"

# followings are other samples
# [plugin.metrics.vmstat]
# command = "ruby /etc/sensu/plugins/system/vmstat-metrics.rb"
# [plugin.metrics.curl]
# command = "ruby /etc/sensu/plugins/http/metrics-curl.rb"

コメントアウトされている行には設定例が記載されています。
※表示形式はTOML形式です。

今回は以下の監視を行う場合の設定を記載します。

  • ポート監視
  • プロセス監視
  • ログ監視

※上記の監視項目はAWSなどのクラウドサービスでは基本メトリックで取得できないため、あえてピックアップしております。

以下に設定例を記載します。

apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
verbose = true

display_name = "Mackerel-Test-Ins"

roles = [ "john-production-service:john-production-web" ]

[host_status]
on_start = "working"
on_stop  = "poweroff"

[plugin.checks.mackerel-check_port-http]
command = "check-tcp -H localhost -p 80 -w 10 -c 20"
notification_interval = 60
max_check_attempts = 3

[plugin.checks.mackerel-check_port-ssh]
command = "check-tcp -H localhost -p 80 -w 10 -c 20"
notification_interval = 60
max_check_attempts = 3

[plugin.checks.mackerel-check_proc-sshd]
command = "check-procs --pattern sshd --user root"
notification_interval = 60
max_check_attempts = 3
check_interval = 5

[plugin.checks.mackerel-check_proc-httpd]
command = "check-procs --pattern httpd --user apache"
notification_interval = 60
max_check_attempts = 3
check_interval = 5

[plugin.checks.mackerel_log-messages]
command = "check-log --file /var/log/messages --pattern ERROR --return"


上記の個々の設定について以下に解説させていただきます。

# 通知先のMackerelのAPIキーです
apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

# /var/log/mackerel-agent.log に詳細なログを記録するかの設定です
# 設定通りアラートが発報されない場合などの切り分けに利用します
verbose = true

# Mackerel上での表示名です
display_name = "Mackerel-Test-Ins"

# Agent起動時にサービス・ロールを付与する設定です
# 事前にサービス・ロールを設定していない場合は、自動的に作成されます
roles = [ "john-production-service:john-production-web" ]


# Agent起動時のホストのステータスを定義します
[host_status]

# Agent起動時にMackerel上でworkingステータスとする設定です
# 前回までのブログで各ステータスの詳細を記載していますのでそちらをご確認下さい
on_start = "working"

# Agent停止時にMackerel上でpoweroffのステータスとする設定です
# 前回までのブログで各ステータスの詳細を記載していますのでそちらをご確認下さい
on_stop  = "poweroff"


# Mackerel上で表示される監視名です
# 以下の場合は「mackerel-check_port-http」が監視名としてMackerel画面で表示されます
[plugin.checks.mackerel-check_port-http]

# 閾値の設定です
# 以下の場合はローカルホストの80番ポートに対し、レスポンスが10秒でWarning、20秒でCriticalとなるように設定しています
# localhost部分に別サーバのIPアドレスを入力することで外部からの監視をすることが可能です
command = "check-tcp -H localhost -p 80 -w 10 -c 20"

# アラートを再通知するかの設定です
# 以下の場合は、60分ごとにアラートを再通知するよう設定しています
notification_interval = 60

# 最大試行回数の設定です
# 以下の場合は3回以上閾値を上回った場合にMackerelに通知を行う設定です
max_check_attempts = 3

# 監視の間隔の設定です
# デフォルトは1分間隔となっていますが、以下の場合は5分間隔で監視を行う設定です
check_interval = 5

# Mackerel上で表示される監視名です
# 以下の場合は「mackerel-check_port-ssh」が監視名としてMackerel画面で表示されます
[plugin.checks.mackerel-check_port-ssh]

# 以下はSSHのポート監視を行う場合の例です
command = "check-tcp -H localhost -p 22 -w 10 -c 20"
notification_interval = 60
max_check_attempts = 3
check_interval = 5


# Mackerel上で表示される監視名です
# 以下の場合は「mackerel-check_proc-sshd」が監視名としてMackerel画面で表示されます
[plugin.checks.mackerel-check_proc-sshd]

# プロセス監視の設定です
# 以下の場合は、ルートユーザで実行されているsshdプロセスを死活監視します
command = "check-procs --pattern sshd --user root"
notification_interval = 60
max_check_attempts = 3
check_interval = 5

# Mackerel上で表示される監視名です
# 以下の場合は「mackerel-check_proc-httpd」が監視名としてMackerel画面で表示されます
[plugin.checks.mackerel-check_proc-httpd]

# 以下はhttpdのプロセス監視を行う場合の例です
command = "check-procs --pattern httpd --user apache"
notification_interval = 60
max_check_attempts = 3
check_interval = 5


# Mackerel上で表示される監視名です
# 以下の場合は「mackerel_log-messages」が監視名としてMackerel画面で表示されます
[plugin.checks.mackerel_log-messages]

# 以下の場合は「/var/log/messages」ファイルにERROR文字列が出力した際にMackerelにアラートを発報します
command = "check-log --file /var/log/messages --pattern ERROR --return"


上記の他にも細かいオプションがありますが、今回は割愛します。 他のオプションも気になる方は以下Mackerelサイトのヘルプをご確認下さい。

mackerel.io
mackerel.io
設定が完了したら、以下のコマンドで設定ファイルの再読み込みを行います。

$ sudo service mackerel-agent reload
Reloading mackerel-agent:                                  [  OK  ]


問題なく再読み込みが完了したら、Mackerel画面で設定が有効になったことを確認できます。

f:id:matsuo1017:20181004141053p:plain
Hosts画面

ここまでの確認が完了していれば、Mackerelにアラートが通知されます。 これをさらにメールなど特定の連絡先に通知を行う場合は、前回投稿させていただいた以下のブログを参照下さい。
techblog.forgevision.com

以上でチェックプラグインを用いた監視設定は完了です。

なお余談ですが、このチェックプラグインのコマンドをそのまま利用することも可能です。 以下「check-disk」を用いた出力例です。

$ /usr/bin/check-disk
Disk OK: Path: /dev, All: 482.57 MB, Used: 0.06 MB, Free: 482.51 MB, Free percentage: 99.99 (inodes: 99.65);
Path: /dev/shm, All: 492.88 MB, Used: 0.00 MB, Free: 492.88 MB, Free percentage: 100.00 (inodes: 100.00);
Path: /, All: 7933.41 MB, Used: 1167.50 MB, Free: 6668.01 MB, Free percentage: 85.10 (inodes: 92.74)

次の配信について

今回はLinux OS向けのチェックプラグインを用いた監視方法を記載させていただきました。 次回はこのままの流れで以下の記事を書きたいと思います!

また、上記の他にも別途クラウドサービスとのインテグレーション方法、注意点なども投稿できたらと考えています。

それでは次回もお楽しみに!!