Prometheus の有名なAnsibleロールである cloudalchemy.prometheus は scrape_configs
変数を使って scrape_configs を設定できる。
今回は、そのなかで ec2_sd_configを利用したサービスディスカバリを設定する。
前提
- 僕たちは ec2 を使っている
- 僕たちは prometheus を使っている
- 僕たちは grafana を使っている
- ステージを表現する目的で Stage というタグを振ってる
- コンテキスト内のコンポーネントを表現する目的で Group というタグを振る
- monitor が含まれる Group では Grafana が動いている
- Grafana のメトリクスは 3000 番ポートで提供されている
具体例
例えば下みたいに設定する。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
scrape_configs:
- job_name: "prometheus"
metrics_path: "{{ prometheus_metrics_path }}"
static_configs:
- targets:
- "{{ ansible_fqdn | default(ansible_host) | default('localhost') }}:9090"
- job_name: "node"
file_sd_configs:
- files:
- "{{ prometheus_config_dir }}/file_sd/node.yml"
- job_name: "instance"
ec2_sd_configs:
- region: "{{ aws_ops_region }}"
access_key: "{{ _aws_ops_access_key }}"
secret_key: "{{ _aws_ops_secret_key }}"
port: 9100
relabel_configs:
- source_labels: [__meta_ec2_tag_Stage]
target_label: env
regex: '({{ env }})'
replacement: "${1}"
- job_name: "grafana"
ec2_sd_configs:
- region: "{{ aws_ops_region }}"
access_key: "{{ _aws_ops_access_key }}"
secret_key: "{{ _aws_ops_secret_key }}"
port: 3000
relabel_configs:
- source_labels: [__meta_ec2_tag_Stage]
target_label: env
regex: '({{ env }})'
replacement: "${1}"
- source_labels: [__meta_ec2_tag_Group]
regex: '.*monitor.*'
action: keep
|
よしなに説明
job_name はメトリックの job ってラベルの値になる。
relabel_config で action を指定をしないと replace になる。 target ラベルの値を regex,replacement で指定できる。
action の値に keep を指定した場合 regex でマッチしなかい対象をフェッチ対象から取り除く。ここでは __meta_ec2_tag_Stage を使って同一ステージのメトリックのみ取得する様に制限している。
access_key, secrete_key で認証するユーザーには AmazonEC2ReadOnlyAccess の許可を与えておく必要がある。また Prometheus が実行されるインスタンスに AmazonEC2ReadOnlyAccess が許可されているロールを与えている場合は鍵の設定は不要。