Datadog導入(PagerDutyおよびSlack連携含む)と監視設定

1. Datadog Integration設定

1-1. Datadog Integration設定

Datadogの対象OrgからIntegrationタブを押下する。

AWSのアイコンを選択し、「Add Another Acount」ボタンを押下

f:id:tomomiik:20200610162915p:plain

以下のように情報を入力する画面が出る(AWS External IDは最初から表示されている。ロール作成時にこのIDを使用するので控えておく。)
per namesの部分に使用するAWSサービスを追加する(今回はEC2とCLB)

f:id:tomomiik:20200610162942p:plain

以下の情報を入力する(AWSロール以外)

AWS Account ID: AWSのアカウントIDを設定
AWS Role name: 後述の手順で作成するIAMロール名を設定する(ロールを作成してから設定すること)
・Tags: AWSアカウントのメールアドレスを設定
・to host with tag: AWSサービスにDD用のタグを付ける場合のタグ名を設定

f:id:tomomiik:20200610163210p:plain

1-2.案件用アカウントのDatadog連携用ロール作成

案件用アカウントマネジメントコンソールから「IAM」画面を表示し、「ロールの作成」ボタンを押下する。

「別のAWSアカウント」を選択し、「アカウントID」の部分にDatadogのアカウントである共通のID「464622532012」を入力し、オプションの「外部IDが必要」にチェックをいれ、表示された外部ID入力箇所に、1-1で表示された外部IDを入力する。(AWSデータへの読み取り専用アクセス『ReadOnlyAccess』をDatadogに許可)

f:id:tomomiik:20200610165507p:plain

ロールの作成中に、ポリシーを作成する。ポリシーは以下の手順に沿って設定する。

docs.datadoghq.com

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "apigateway:GET",
                "autoscaling:Describe*",
                "budgets:ViewBudget",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudtrail:DescribeTrails",
                "cloudtrail:GetTrailStatus",
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "codedeploy:List*",
                "codedeploy:BatchGet*",
                "directconnect:Describe*",
                "dynamodb:List*",
                "dynamodb:Describe*",
                "ec2:Describe*",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:Describe*",
                "elasticache:List*",
                "elasticfilesystem:DescribeFileSystems",
                "elasticfilesystem:DescribeTags",
                "elasticloadbalancing:Describe*",
                "elasticmapreduce:List*",
                "elasticmapreduce:Describe*",
                "es:ListTags",
                "es:ListDomainNames",
                "es:DescribeElasticsearchDomains",
                "health:DescribeEvents",
                "health:DescribeEventDetails",
                "health:DescribeAffectedEntities",
                "kinesis:List*",
                "kinesis:Describe*",
                "lambda:AddPermission",
                "lambda:GetPolicy",
                "lambda:List*",
                "lambda:RemovePermission",
                "logs:TestMetricFilter",
                "logs:PutSubscriptionFilter",
                "logs:DeleteSubscriptionFilter",
                "logs:DescribeSubscriptionFilters",
                "rds:Describe*",
                "rds:List*",
                "redshift:DescribeClusters",
                "redshift:DescribeLoggingStatus",
                "route53:List*",
                "s3:GetBucketLogging",
                "s3:GetBucketLocation",
                "s3:GetBucketNotification",
                "s3:GetBucketTagging",
                "s3:ListAllMyBuckets",
                "s3:PutBucketNotification",
                "ses:Get*",
                "sns:List*",
                "sns:Publish",
                "sqs:ListQueues",
                "states:ListStateMachines",
                "states:DescribeStateMachine",
                "support:*",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "xray:BatchGetTraces",
                "xray:GetTraceSummaries"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

これでAWS(案件用アカウント)とDatadogのIntegration設定が完了です。

2.DatadogとSlack連携

2-1. プロジェクト用のSlackチャンネルと連携

プロジェクト用のSlackチャンネルを設定する(#pj-XXXXXXX)

Datadog管理画面のIntegrationからSlackを選択する

f:id:tomomiik:20200610171111p:plain

作成したチャンネル名を入力し、「Save」する

f:id:tomomiik:20200610171216p:plain

3.DatadogとPagerDuty連携

3-1. PagerDutyの案件用サービス作成

サービスを以下ボタンから作成する
f:id:tomomiik:20200610182351p:plain

必要項目を入力してサービスを作成する
f:id:tomomiik:20200610182919p:plain

作成されると以下のようにIntegration keyが発行される
f:id:tomomiik:20200610184053p:plain

3-2. Datadog と PagerDuty連携設定

DatadogのIntegration設定からSlackを選択する
f:id:tomomiik:20200610184822p:plain

「Add row」から、3-1で作成したサービスのサービス名とIntegration keyを設定し、Update Configurationボタンを押下します
f:id:tomomiik:20200610185132p:plain

以下の通り、モニター作成時にリストにPDのサービス名が乗ってくればOK!
f:id:tomomiik:20200610185201p:plain

4.監視対象のEC2にタグ付け

手順[1-1]にて[to host with tag: AWSサービスにDD用のタグを付ける場合のタグ名]に設定したタグをEC2のNameタグに追加します。
Key名は任意の設定した値にしてValueを「enabled」にした場合以下のようになります。

f:id:tomomiik:20200611005424p:plain

この設定後、数分待つと、タグを設定したEC2が監視対象として認識され、DD管理画面のInfrastracture listからアカウント名等でフィルタリングすると、対象のEC2のインスタンスIDが表示され、右側にAWSのマークがつきます。
ELB等はタグがなくても1-1で対象のサービスとして選択していれば、はじめから以下のように表示されます。

f:id:tomomiik:20200611005805p:plain

5.監視対象のEC2にDatadog Agentをインストール

DD管理画面を開き、Integration > API からEC2のOSを選択し、記載されているコマンドをrootで実行します。

f:id:tomomiik:20200611230949p:plain

以下のように表示されたらインストール成功です。

# DD_AGENT_MAJOR_VERSION=7 DD_APXXXX~~~~~
(略)
インストール:
  datadog-agent.x86_64 1:7.20.0-1                                               

完了しました!

* Adding your API key to the Agent configuration: /etc/datadog-agent/datadog.yaml

* Starting the Agent...

stop: Unknown instance: 
datadog-agent start/running, process 15356


Your Agent is running and functioning properly. It will continue to run in the
background and submit metrics to Datadog.

If you ever want to stop the Agent, run:

     stop datadog-agent

And to run it again run:

     start datadog-agent

念の為Statusをチェックすると無事起動してこのように表示されます。

# datadog-agent status
Getting the status from the agent.

===============
Agent (v7.20.0)
===============

  Status date: 2020-06-11 23:05:39.860346 JST
  Agent start: 2020-06-11 23:05:12.430994 JST
  Pid: 15368
  Go Version: go1.13.8
  Python Version: 3.8.1
  Build arch: amd64
  Check Runners: 4
  Log Level: info

  Paths
  =====
    Config File: /etc/datadog-agent/datadog.yaml
    conf.d: /etc/datadog-agent/conf.d
    checks.d: /etc/datadog-agent/checks.d

  Clocks
  ======
    NTP offset: -2.811ms
    System UTC time: 2020-06-11 23:05:39.860346 JST

  Host Info
  =========
(略)

これでAgentのインストールが完了したので続いてはプロセス監視設定です。

6.プロセス監視設定

5でDatadogAgentをインストールしたEC2に対してプロセス監視設定を施しておきます。
今回はCentOS6.7のEC2になります。
設定コマンドと表示は以下となり、Datadogのプロセス監視用のconfファイルを編集し監視したいプロセスを記載してDatadogAgentを再起動すればOKです。

[root@web01 ec2-user]# cd /etc/datadog-agent/conf.d/process.d/
[root@web01 process.d]# ls -la
合計 16
drwxr-xr-x   2 dd-agent dd-agent 4096  6月 12 14:49 2020 .
drwxr-xr-x 143 dd-agent dd-agent 4096  6月 12 14:49 2020 ..
-rw-r--r--   1 dd-agent dd-agent 5276  6月 12 08:38 2020 conf.yaml.example
[root@web01 process.d]# 
[root@web01 process.d]# cp -p conf.yaml.example conf.yaml
[root@web01 process.d]# 
[root@web01 process.d]# vim conf.yaml
[root@web01 process.d]# 
[root@web01 process.d]# initctl status datadog-agent
datadog-agent start/running, process 27150
[root@web01 process.d]# initctl restart datadog-agent
datadog-agent start/running, process 27774
[root@web01 process.d]# 

▼conf.yamlの内容

init_config:
instances:
  - name: sshd
    search_string:
    - sshd
    exact_match: False
  - name: rsyslogd
    search_string:
    - rsyslogd
    exact_match: False
  - name: ntpd
    search_string:
    - ntpd
    exact_match: False
  - name: crond
    search_string:
    - crond
    exact_match: False

きちんとプロセス監視設定がされたか確認するには以下のコマンドでプロセス監視対象が表示されているか確認するのが良いです。

# datadog-agent status

以下のように「Process」部分に設定したプロセス名とファイルパスが正しく表示されればOKです。

f:id:tomomiik:20200612150620p:plain

これでプロセス監視設定が完了したので、続いてそのモニター作成に写ります

6.モニター(監視項目)作成

6-1. プロセス監視モニター作成

Datadog管理画面から以下の通り「New monitor」を押下し、「Process Check」を選択する

f:id:tomomiik:20200612164531p:plain

今回は以下のようにSshdのプロセス監視項目を作成するのでプルダウンから選択する。
複数案件を一つのOrgで管理している場合は案件用のアカウントやIntegration設定の際にhostにつけたタグ名(EC2のNameタグ)を指定してフィルタリングする。

f:id:tomomiik:20200612164551p:plain

これはデフォルトのままでOK

f:id:tomomiik:20200612164811p:plain

通知設定を以下のように記載
上の手順で設定したSlackやPagerDutyと連携してここの通知設定を記載するとアラート発生時にモニターの内容を通知することができます。(対象のSlackチャンネルと対象のPagerDutyサービスを指定して設定すること)
またバックログで自動アラート課題作成設定をしている場合は払い出されたメールアドレスを設定することでアラート発生時にアラート課題が自動で作成されます。
アラート用メーリングリストを指定してメールを飛ばすこともできるので必要に応じて設定すること。
タグは案件名等つけておくとモニターをフィルタリングする際に便利です。
最後に『Save』で保存します。

f:id:tomomiik:20200612164835p:plain

無事作成されると以下のようにプロセス監視設定を施したホスト一覧の棒グラフが緑で表示されます。

f:id:tomomiik:20200612165636p:plain

これでプロセスチェックモニターの作成は完了です。
他のモニター作成時も上記と同じ通知設定を施すため、以下の手順からは省略します。

6-2. 死活監視モニター作成

「Select a monitor type」にて「host」を選択します。
f:id:tomomiik:20200612194858p:plain

モニターのグラフ上に対象のホストが全て表示されればOKです。

6-3. リソース監視モニター作成

「Select a monitor type」にて「Integration」を選択します。 f:id:tomomiik:20200612194934p:plain

▼CPU使用率の設定

f:id:tomomiik:20200615155203p:plain

▼メモリ使用率の設定

f:id:tomomiik:20200612195700p:plain

▼ディスク使用率の設定

f:id:tomomiik:20200612195108p:plain

各々、モニターのグラフ上に以下のように対象のホストが全て表示されればOKです。 (以下はCPU使用率のモニター)

f:id:tomomiik:20200615155255p:plain

6-4. ELB(CLB)のモニター作成

「Select a monitor type」にて「Metrics」を選択します。

▼Latencyの設定

f:id:tomomiik:20200612195204p:plain

▼Unhealthy host countの設定

f:id:tomomiik:20200612195215p:plain