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

本記事は[Datadog Advent Calendar 2019](https://qiita.com/advent-calendar/2019/datadog)の10日目の記事です！！

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

agentのインストールには[ansible](https://www.ansible.com/)、dashboardsやmonitorsの作成には[terraform](https://www.terraform.io/)を主に使ってコード化しています。今回は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かな。更新してないのがバレる :sweat:)

あとは `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_config` と `datadog_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
```

変数内で変数使っていて若干分かりづらいかもですが、まぁ分かりますよね :kissing:(全然説明していない)
この設定が `/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台エージェントをインストールしていたら日がくれてしまいます。なので数十、数百のサーバ群に<font color="Red">一気にインストールと設定を行う</font>必要があるんです。

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

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