Datadogでアラートなど設定して監視をするときは、モニタリングを使うことになります。
Kubernetesのコンテナ運用の場合、コンテナやPOD単位でCPUのしきい値などを指定することにな
ると思いますが、
「このコンテナだけ夜間にバッチ処理走るから、アラートがなってしまう」ことがありました。
Datadogでは監視を設定しているモニタリングに対して、その時間だけアラートを止めることができるダウンタイムを設定することができます。
今回は特定のコンテナに
対してアラートがならないよう、ダウンタイムを設定してみたいと思います。
どんなPODにもラベルが付与してあるかと思います。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
DatadogのAgentにはlabels:
のappをkube_app
として取り込む設定があるので、その設定をhelmに追加しました。
podLabelsAsTags:
app: kube_app
app以外にもオリジナルのラベルを登録できるみたいです。
monitoring: false
とかもいいかと思いました。
監視しているモニタリング設定にkube_appを追加することでダウンタイムで指定することができます。
# Define the metric
( avg:kubernetes.cpu.usage.total{!kube_namespace:kube-system} by {container_name, kube_app}
ダウンタイム設定でscopeを指定するにはモニタリングでgroup_by
された値しか指定することができないので追加が必要でした。
最初はコンテナ名でダウンタイムを設定していたのですが、コンテナ名ってユニークなサフィックスがつくんですよね。
コンテナって再起動するたびにそのサフィックスが変更されるので、その度にダウンタイム設定するのは現実的ではなかったです。
次に考えついたのがPOD名での指定。
でもPODもサフィックスついてるし、レプリカ数が増えればその都度追加していかなければ行けなかったです。
しかも設定できるscopeはいろいろと条件がありました。
pod_name: nginx-deployment-
pod_name: nginx-deployment-\d
podname: nginx-deployment-0, podname: nginx-deployment-1
たとえば、host:Xのダウンタイムをスケジュールし、host:Xとhost:Yの両方でホストトリガーによってグループ化されたマルチアラートモニターをスケジュールすると、Datadogはhost:Yの通知をトリガーしますが、host:Xの通知はトリガーしません。
コンテナは増えたり減ったり名前が変わったり、かなり柔軟に扱われます。
その都度、設定をイジイジするのは現実的じゃないですよね。
ラベルという概念を取り込むことで、楽に簡単に管理することができました。
Datadog以外でもラベルを使うことが多々あるため、ラベルの重要性を改めて実感し
ました。
適切なラベルの運用管理って何だろう。