mstdn.nere9.help を Datadog で監視する

  • このエントリーをはてなブックマークに追加

私と数人の友人で mstdn.nere9.help という Mastodon インスタンスを運営しています。

このインスタンスが稼働して半年以上が経過しようとしていますが、未だにモニタリングを真面目にやっていませんでした。過去に MackerelPrometheus + Grafana で監視を試みましたが、主に私達のやる気の問題もあり、ちゃんと使わないまま放置していました。

今回は、以前から気になっていた SaaS 型の監視サービス『Datadog』を使い、最低限の監視を整えてみました。

mstdn.nere9.help の構成

https://mstdn.nere9.help/about/more より

  • Web サーバ1台
    • さくらのクラウド
    • Ubuntu (16.04)
    • 各サービスを Docker コンテナで稼働
    • web
    • sidekiq
    • nginx
    • streaming
  • Cache サーバ1台
    • さくらのクラウド
    • Redis
  • DB サーバ
    • Google Cloud Platform(TOKYO)
    • PostgreSQL

dd-agent をインストール

dd-agent を Web サーバにインストールし、監視に追加します。 Docker コンテナとして起動するのと、ネイティブにインストールする2種類の方法があります。今回はネイティブインストールを選択しました。

お試しする場合は Docker コンテナを起動する方法が良いと思いますが、個人的に監視系を Docker コンテナとして運用するのはそれなりに大変(ホストのメトリクス取るとか)なのでネイティブインストールします。

Integrations -> Agent から Ubuntu を選択。そこに書いてあるシェルコマンドを実行してインストール完了です。

$ DD_API_KEY=XXXXXXXXXXXXXXXXXXXXXX bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh)"

Setup - Installing on Ubuntu | Datadog

これだけで Infrastructure List にホストが追加されます。

datadoghost

LA とか CPU とかメモリ使用量が見れるようになりました。

Docker コンテナの監視をする

Datadog はデフォルトの機能として Docker コンテナ単位の CPU 使用率やメモリ使用量、さらには実行中のコマンド単位でも同様のメトリクスを収集してくれます。

ここまでやってくれるのか感はありますが、個人的には取れるだけ取ったほうが障害対応などのいざという時に役に立つので便利だと思っています。初見の人やインフラ詳しくない人が見た時に混乱するという問題もあるので一長一短ではあると思います。

さて、こちらの設定ですが、 /etc/dd-agent/conf.d/ 以下に設定ファイルのサンプルが大量に置いてあります。

$ ls /etc/dd-agent/conf.d/
activemq_xml.yaml.example        docker_daemon.yaml.example   kafka.yaml.example              network.yaml.default            solr.yaml.example
activemq.yaml.example            elastic.yaml.example         kong.yaml.example               nfsstat.yaml.example            spark.yaml.example
agent_metrics.yaml.default       etcd.yaml.example            kube_dns.yaml.example           nginx.yaml.example              sqlserver.yaml.example
apache.yaml.example              fluentd.yaml.example         kubernetes_state.yaml.example   ntp.yaml.default                ssh_check.yaml.example
auto_conf                        gearmand.yaml.example        kubernetes.yaml.example         openstack.yaml.example          statsd.yaml.example
btrfs.yaml.example               go_expvar.yaml.example       kyototycoon.yaml.example        oracle.yaml.example             supervisord.yaml.example
cacti.yaml.example               go-metro.yaml.example        lighttpd.yaml.example           pgbouncer.yaml.example          system_core.yaml.example
cassandra_nodetool.yaml.example  gunicorn.yaml.example        linux_proc_extras.yaml.example  php_fpm.yaml.example            system_swap.yaml.example
cassandra.yaml.example           haproxy.yaml.example         mapreduce.yaml.example          postfix.yaml.example            tcp_check.yaml.example
ceph.yaml.example                hdfs_datanode.yaml.example   marathon.yaml.example           postgres.yaml.example           teamcity.yaml.example
consul.yaml.example              hdfs_namenode.yaml.example   mcache.yaml.example             powerdns_recursor.yaml.example  tokumx.yaml.example
couchbase.yaml.example           hdfs.yaml.example            mesos_master.yaml.example       process.yaml.example            tomcat.yaml.example
couch.yaml.example               mesos_slave.yaml.example        rabbitmq.yaml.example           twemproxy.yaml.example
directory.yaml.example           http_check.yaml.example      mesos.yaml.example              redisdb.yaml.example            varnish.yaml.example
disk.yaml.default                jenkins.yaml.example         mongo.yaml.example              riakcs.yaml.example             vsphere.yaml.example
dns_check.yaml.example           jmx.yaml.example             mysql.yaml.example              riak.yaml.example               yarn.yaml.example
kafka_consumer.yaml.example  nagios.yaml.example             snmp.yaml.example               zk.yaml.example

Docker コンテナの監視は docker_daemon.yaml.example を使います。

$ sudo cp /etc/dd-agent/conf.d/docker_daemon.yaml.example /etc/dd-agent/conf.d/docker_daemon.yaml

cp (or mv) するだけで OK です。

厳密にいえば Docker のソケットファイルが /var/run/docker.sock にあれば変更する必要はありません。違う場合は以下の箇所を適宜変更してください。

# /etc/dd-agent/conf.d/docker_daemon.yaml
url: "unix://path/to/docker.sock"

そして、 dd-agent の実行ユーザ(デフォルトは dd-agent)に Docker の権限を与えてください。たぶん Read 権限だけでいいかも。

私は docker グループに dd-agent ユーザを追加することで対応しました。たぶん Docker コンテナで dd-agent 動かしてたら不要な作業なのかも?

$ sudo gpasswd -a dd-agent docker

数分待つと Integrations -> containers のページから起動中のコンテナのメトリクスが見られるようになります。

datadog_containers

やばい!

プロセスの監視をする

Datadog では サーバ内のプロセス単位で監視ができます。

一言で表すと、『top コマンドのモニタリング機能』です。ここまで取ってくれるのか…。

# /etc/dd-agent/datadog.conf
[Main]
...(snip)
process_agent_enabled: true

Datadog Process and Container Monitoring | Datadog Docs

これだけです。

Infrastructure -> processes からプロセス単位のメトリクスが見られるようになります。

datadog_process

普段は見ないけど、障害対応の時に重宝しそうです。

Integrations から GCP を連携する

Datadog の特徴として、 Integrations が充実していることです。 AWS, GCP, Arure などのクラウドインフラはもちろんのこと、 Slack, GitHub などの SaaS, Chef や Ansible などのツールまで幅広く提供されています。

GCP の場合、 Google ログインをして登録したいプロジェクトを指定すれば完了です。

注意しなければならないのは、 Integrations で取得した各サービスのメトリクスは Dashboards List から見れるということです。これに気付くのにしばらくかかりました。

datadog_integrations_gcp

モニタリングする

Monitors -> New Monitor からモニタリングを追加します。

とりあえず mstdn.nere9.help の外形監視しようと思い、どこから追加するか探しましたが見つからず…。

探したところ、 /etc/dd-agent/conf.d/http_check.yaml に監視したい URL を追加する準備が必要だったそうです。

HTTP check | Datadog Docs

というわけで

$ sudo cp /etc/dd-agent/conf.d/http_check.yaml.example /etc/dd-agent/conf.d/http_check.yaml

でファイルをコピーして

# /etc/dd-agent/conf.d/http_check.yaml

instances:
  - name: mstdn.nere9.help
    url: https://mstdn.nere9.help
    timeout: 10

と追加しました。

この辺りの作業については、こちらが詳しく解説されています。

Datadogで手軽にいい感じに外形URL監視を実現する方法 - Qiita

ここ、 Mackerel を普段使っていると『外形監視の追加に設定ファイルの変更が必要なのかあ…』という気持ちです。

使ってみた感想

同じ SaaS 型の監視サービスである Mackerel と比べると、Integrations を使いたい・ Docker コンテナのメトリクスを細かく見たいという場合は Datadog, インストールするだけでモニタリングやアラートの設定までやってくれる利便性は Mackerel が良いのかなという印象です。

どちらも一長一短で、どういう運用がしたいのかで変わってくるかなと思いました。

個人的には Mackerel の mkr コマンドやカスタムメトリクスなどの機能が気に入っているので、 Datadog に同等の機能が備わっているか気になるところです。

まあしばらくは色々試してみたいので Datadog を使おうかなと思います。