背景
- ElasticsearchのThreadPoolごとのRejected数はノードを再起動しないとリセットされない
- つまりstatsを取得しても、その数値は過去の累積値であって、直近発生した拒否数は分からない
そういう事情のもとで、Datadogで監視する方法をメモ
前提
メトリクスの取得方法
$ curl -s 'https://hoge.com/_nodes/stats?human&pretty' | jq '.nodes.XXXXXX..thread_pool.write'
{
"threads": 2,
"queue": 0,
"active": 0,
"rejected": 10000,
"largest": 2,
"completed": 123456789
}
AWS OpenSearch(旧AWS ES)ではこちらを参照。
https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/managedomains-cloudwatchmetrics.html
ElasticsearchのThreadPoolごとのRejected数はノードを再起動しないとリセットされない
こちらのフォーラムにもQ&Aがあるとおり、ノードの再起動でリセットされるものだそうです。
つまり、直近1分で発生したRejected数を見るには、1分前との差分で見ないといけないです。
Datadogで監視
グラフデータ
Timeseriesグラフで見る時、上述のとおり今のメトリクスと1分前のメトリクスの差をグラフ表示させることができます。
Timeshift
ここで使った方法は上記のTimeshift関数を使うものです。
timeshift(metrics, time_in_second)
という形式で指定したメトリクスの指定した時間だけ前の値を取得する関数です。
例えば、前述のグラフデータを数式表現した以下図をみると、timeshift(avg:aws.es.threadpool_wirte_rejected{}.by{}.as_count(), -60)
のように使われています。
ちなみに、上図ではa, bとそれぞれ定義されていますが、aだけ定義して、式でa - timeshift(a, -60)
と入力することも可能です。
ただし、グラフを保存すると、自動的にa, bという形で再定義されてしまうので要注意。