概要
mackerelはAWSインテグレーションでAWSのいくつかのサービスのメトリクスを自動で収集してくれるのですがAmazonElasticsearchServiceは対応していないので自分でメトリクスを収集する必要があります。
プラグイン自体は既に存在しているのでそれを使えば簡単にメトリクスは収集出来るのですが、単純に何らかのインスタンスのmackerel-agentの設定に入れてしまうとそのホスト自身のメトリクスとして収集されてしまいます。
それを防ぐためmackerelのcustom_identifierの機能を使ってElasticsearchServiceをインスタンスとしてメトリクスを収集する方法をまとめました。
空のインスタンス設定作成
まず、mackerel側に空のインスタンスを作成します。
mkrを使うのが一番簡単です。mkrについてはこちら
mkr create --customIdentifier 'xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com' 'xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com'
APIを直接叩く方法も残しておきます。
API_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
curl https://mackerel.io/api/v0/hosts -H "X-Api-Key: ${API_KEY}" -H "Content-Type: application/json" -X POST -d '
{
"name": "xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com",
"meta": {
"network": {}
},
"status": "standby",
"roleFullnames": [
"<サービス>:<ロール>"
],
"customIdentifier": "xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com"
}'
<サービス>:<ロール>
は事前に作成しておく必要があります
customIdentifierとnameはElasticsearchServiceのエンドポイントのドメインを指定していますが、分かりやすいものを指定しても問題ありません。
mackerel-agentの設定
次にmackerel-agentを設定します。
プラグインはmackerel-plugin-aws-elasticsearchを使用します。
[plugin.metrics.aws-elasticsearch]
command = '/usr/local/bin/mackerel-plugin-aws-elasticsearch -domain=<ElasticsearchService作成時に指定したdomain> -client-id=12345678901 -region=ap-northeast-1 -access-key-id=XXXXXXXXXXXXXXXXXXXX -secret-access-key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
custom_identifier = "xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com"
指定するIAMに最低限必要な権限は
cloudwatch:GetMetricStatistics
です。
custom_identifier
には先程のcustomIdentifier
と同じものを指定して下さい。
mackerel-agentを再起動してしばらくするとmackerelでメトリクスが参照出来るようになります。
参考