无法通过 alertmanager 发送电子邮件
Can not send email through alertmanager
docker-compose.yml: 服务已启动 运行.
version: '3'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
volumes:
- ./prometheus/conf:/etc/prometheus
# - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./alertmanager/alert_rules.yml:/alertmanager/alert.rules.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
ports:
- 9093:9093
volumes:
- ./alertmanager/:/etc/alertmanager/
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager'
prometheus.yml: 包含目标和警报目标集的 Prometheus 配置文件。 alertmanager 目标 url 工作正常。
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.10.5.14:9093
scheme: http
timeout: 10s
api_version: v1
rule_files:
- "/alertmanager/alert.rules:/alertmanager/alert.rules"
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- "google.com"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
alert.rules: 标准警报规则。
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >1 minutes.
- alert: InstanceDown
expr: up == 0
for: 1m
alertmanager.yml: 通过 gmail smtp 发送警报的代码。
route:
group_by: [Alertname]
# Send all notifications to me.
receiver: email-me
receivers:
- name: email-me
email_configs:
- to: anyemail.com
from: senderlogin@gmail.com
smarthost: smtp.gmail.com:587
auth_username: "senderlogin@gmail.com"
auth_identity: "senderlogin@gmail.com"
auth_password: "password"
问题:所有容器都在工作,但在 prometheus 规则中没有规则。
而且这些信件也没有相应地出现。我不明白我错过了什么。欢迎任何提示。谢谢。
enter image description here
enter image description here
从 prometheus 容器的角度来看,Alertmanager 不在本地主机上,网络在容器中命名空间,因此您需要使用 DNS 发现联系 alertmanager 以查找当前容器 IP。使用 compose,DNS 会自动为服务名称配置,在本例中为 alertmanager
:
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
docker-compose.yml: 服务已启动 运行.
version: '3'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
volumes:
- ./prometheus/conf:/etc/prometheus
# - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./alertmanager/alert_rules.yml:/alertmanager/alert.rules.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
ports:
- 9093:9093
volumes:
- ./alertmanager/:/etc/alertmanager/
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager'
prometheus.yml: 包含目标和警报目标集的 Prometheus 配置文件。 alertmanager 目标 url 工作正常。
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.10.5.14:9093
scheme: http
timeout: 10s
api_version: v1
rule_files:
- "/alertmanager/alert.rules:/alertmanager/alert.rules"
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- "google.com"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
alert.rules: 标准警报规则。
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >1 minutes.
- alert: InstanceDown
expr: up == 0
for: 1m
alertmanager.yml: 通过 gmail smtp 发送警报的代码。
route:
group_by: [Alertname]
# Send all notifications to me.
receiver: email-me
receivers:
- name: email-me
email_configs:
- to: anyemail.com
from: senderlogin@gmail.com
smarthost: smtp.gmail.com:587
auth_username: "senderlogin@gmail.com"
auth_identity: "senderlogin@gmail.com"
auth_password: "password"
问题:所有容器都在工作,但在 prometheus 规则中没有规则。 而且这些信件也没有相应地出现。我不明白我错过了什么。欢迎任何提示。谢谢。 enter image description here enter image description here
从 prometheus 容器的角度来看,Alertmanager 不在本地主机上,网络在容器中命名空间,因此您需要使用 DNS 发现联系 alertmanager 以查找当前容器 IP。使用 compose,DNS 会自动为服务名称配置,在本例中为 alertmanager
:
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093