ansibleでdd-agentをインストールする


本記事はDatadog Advent Calendar 2019の10日目の記事です!!

はじめに

メトリクスの可視化と監視・アラートにdatadogを用いていて、だいぶお世話になっているdatadog。
私の会社ではエンジニアを3区分するとクライアント、サーバ、SREになります。(もっと細かい区分もありますが大枠はこの3つ)
今回何を題材にしようか考えたのですが、元々サーバエンジニアであった(今はSRE)私はコード化が大好き。
会社ではインフラのコード化をここ2~3年進めてきましたが、datadogに関しても一部コード化を行っています。

agentのインストールにはansible、dashboardsやmonitorsの作成にはterraformを主に使ってコード化しています。今回はansibleを使ってインスタンスにdd-agentをインストールする方法を紹介しようかなと思います。

インストール方法

といっても公式のgithubにroleが上がっているのでこれを使用するのがてっとり早いでしょう。
ドキュメントもありますしね。
https://github.com/DataDog/ansible-datadog

ansibleでroleを使用する際は必ずバージョン(タグ)指定をするようにしましょう。
でないと思わぬバージョンアップで設定が変更されてしまう可能性があります。
といっても再インストールをしなければローカルに落としたrole自体が勝手に変更されることは無いですが。。
まぁmasterとか指定してるとどんどん更新とか入って自分のローカルがどのバージョンのものなのか分かりづらいのでやはり指定しておきましょう。

- src: Datadog.datadog
  name: datadog
  version: 3.0.0

こんな感じです。(最新は3.3.0かな。更新してないのがバレる )

あとは ansible-galaxy install を使用してansibleで使用できるようにしましょう!!

roleの使用の仕方

ansibleで使用するにはroleを呼び出し、引数を渡してあげるだけ。

# datadogインストール
- role: ../../roles/galaxy/datadog
  when: datadog_flag
  datadog_agent5: "{{ install_datadog_agent5 }}"
  datadog_agent_version: "{{ install_datadog_agent_version }}"
  datadog_api_key: "{{ install_datadog_api_key }}"
  datadog_enabled: "{{ install_datadog_enabled }}"
  datadog_config: "{{ install_datadog_config }}"
  datadog_config_ex: "{{ install_datadog_config_ex }}"
  datadog_checks: "{{ install_datadog_checks }}"
  tags: datadog

このような形でroleを呼び出してあげます。
私が最初に触っていた環境ではagentのバージョンが5系だったので datadog_agent5 を選択可能にしています。基本的には全部6系に移行しましたが、運用中で移行が厳しいものとかは5系で運用していました。今から触るという方は6系で問題ないと思いますので、 datadog_agent5 はデフォルト(no)でいいですね。

引数パラメータ

上で説明した datadog_agent5 以外でもパラメータは大体みたら分かるものになっています。
基本的に設定で重要なのは datadog_configdatadog_checks です。
私はデフォルトでこれらのパラメータを設定し、必要があればそのデフォルト値を上書くような感じで実行しています。
なので今回はデフォルト値を紹介(当たり前ですが、インフラ環境や取得したいメトリクスによって設定は変わります)

datadog_config のデフォルト値

install_datadog_config:
  tags: "env:{{ env_variable }}, server_type:{{ server }}"
  log_level: INFO
  hostname: "{{ datadog_hostname | default(inventory_hostname) }}"
  apm_config:
    enabled: false
  logs_enabled: false

変数内で変数使っていて若干分かりづらいかもですが、まぁ分かりますよね (全然説明していない)
この設定が /etc/datadog-agent/datadog.yaml の設定になります

datadog_checks のデフォルト値

install_datadog_checks:
  process:
    init_config:
      min_collection_interval: 15
    instances:
      - name: sshd
        search_string: ["sshd"]
      - name: rsyslogd
        search_string: ["rsyslogd"]
      - name: chrony
        search_string: ["chronyd"]
  tcp_check:
    init_config:
      min_collection_interval: 15
    instances:
      - name: ssh 22
        host: 127.0.0.1
        port: 22
        skip_event: true

ここの設定が /etc/datadog-agent/conf.d/ 配下の設定をしています。
今回はprocess監視とtcp監視の設定を入れています。
この設定が、必要なメトリクス分だけ追加されます。

まとめ

今回はansibleを使用して、dd-agentをインストールする方法を軽く紹介しました。
そういえばなぜインストールをコード化しているのか説明していませんでしたね。
1サーバにagentを入れるだけであれば正直手動でagent入れて、各種設定入れればいいかもしれません。
ただそんな状況ってちょっとテストしてみる時くらいではないでしょうか。実際に本番稼働させる環境はサーバの数が数十、数百なんて環境もザラにあります。そんな状況で1台1台エージェントをインストールしていたら日がくれてしまいます。なので数十、数百のサーバ群に一気にインストールと設定を行う必要があるんです。

また、自動化していると間違いもなくせますし、あとから設定を確認する際はサーバに入っていちいち設定を確認するのではなく、コードを確認すれば済みます。また複数人での開発にも役立つでしょう。コード化しておくことでレビューができるようになりますので、おかしな設定が入り込む可能性も少なくなります。

エージェントのインストール&設定を手動で行っている方がいらっしゃいましたら、この記事を参考にコード化してみてはいかがでしょうか