Prometheusのec2 service discoveryを試す
Prometheusには ec2 service discovery機能があり、EC2インスタンスに監視用のagent(exporter) をインストールして、特定のタグを設定するだけで監視・モニタリングの対象とすることができます。
通常のノードの追加
設定方法は以下のように、対象となるノードの情報をPrometheusの設定ファイルに書き、設定を反映されるためPrometheusを再起動します。
これの作業はノードを追加するたびに発生します。
- job_name: 'node' scrape_interval: 30s scrape_timeout: 15s static_configs: - targets: ['172.0.0.3:9100', '172.0.0.3:9256'] labels: name: 'server1' stage: 'prod'
ec2 service discoveryを利用したノードの追加方法
ec2 service discoveryを利用するには設定ファイルを以下のように書きます。
ec2 service discoveryを利用することで、この例ではインスタンスのタグ(Stage)に、prodかstgを値と設定すると自動的に監視・モニタリング対象として自動的に検出します。
- job_name: 'node' ec2_sd_configs: - region: ap-northeast-1 access_key: APIKeyを書く secret_key: SECRET_KEYを書く port: 9100 relabel_configs: - source_labels: [__meta_ec2_tag_Stage] regex: (stg|prod) action: keep - source_labels: [__meta_ec2_tag_Name] target_label: name - source_labels: [__meta_ec2_tag_Stage] target_label: stage
job_name はPrometheusでよく設定される監視対象をグルーピングするラベルです。
ec2_sd_configsにある設定項目は Configuration | Prometheus で確認できます。
ここでは最低限のAWSの設定と、Node exporter がリクエストを受け付ける port番号の設定のみをしています。
relabel_configsは以下のようになっています。
1. 最初の source_labels
監視・モニタリング対象とするかどうかの判断をします。この例ではEC2インスタンスのTag(Stage) の値が、stgかprodの場合は監視・モニタリング対象になります。
2. 2番目と3番目の source_labels
EC2インスタンスのTagの値をPrometheusのラベルに設定しています。
ここでは、EC2のタグのNameの値をPrometheusのラベルのnameに設定し、同様にStageの値をstageに設定しています。
このようにPrometheusのラベルに値を設定しておかないと、Prometheus内(Alertmanager含む)で値を利用できないためこのように設定します。
relabel_configsの設定は EC2 Discovery Relabelling - Robust Perception が参考になりました。
複数の exporter を利用する場合
監視に利用する exporter が複数の場合は、port を複数設定する必要が出てきますが、ec2_sd_configs では port は int値のみ指定可能で複数のportをまとめて書くことはできません。
そのため Node exporter と Process exporter を利用するような場合には、以下のように ec2_sd_configs を書く2つ書くことになります。
- job_name: 'node' ec2_sd_configs: - region: ap-northeast-1 access_key: APIKeyを書く secret_key: SECRET_KEYを書く port: 9100 relabel_configs: - source_labels: [__meta_ec2_tag_Stage] regex: (stg|prod) action: keep - source_labels: [__meta_ec2_tag_Name] target_label: name - source_labels: [__meta_ec2_tag_Stage] target_label: stage - job_name: 'process' ec2_sd_configs: - region: ap-northeast-1 access_key: APIKeyを書く secret_key: SECRET_KEYを書く port: 9256 relabel_configs: - source_labels: [__meta_ec2_tag_Stage] regex: (stg|prod) action: keep - source_labels: [__meta_ec2_tag_Name] target_label: name - source_labels: [__meta_ec2_tag_Stage] target_label: stage