普罗米修斯是一个开源系统 最初在 SoundCloud 上构建的监控和警报工具包。Prometheus
收集其指标并将其存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。
特征:
- 具有由指标名称和键/值对标识的时间序列数据的多维数据模型
- PromQL,一种灵活的查询语言,可利用此维度
- 不依赖分布式存储;单服务器节点是自治的
- 时序收集通过 HTTP 上的拉取模型进行
- 通过中间网关支持推送时间序列
- 通过服务发现或静态配置发现目标
- 多种图形和仪表板支持模式
Grafana
允许您查询、可视化、提醒和了解您的指标,无论它们存储在何处。创建、探索并与团队共享精美的仪表板,并培养数据驱动型文化,简单来说Grafana是一个可视化的指标展示工具,可通过各种炫酷的视图进行各种数据的展示。
Alertmanager 主要用于接收Prometheus
发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行分组、静默、抑制等,是Prometheus生态中非常重要的一个核心模块。
Prometheus服务器中的警报规则向Alertmanager发送告警。
Alertmanager 管理这些告警,对这些告警进行分组去重,根据理由规则发送到接受者,比如发送电子邮件、呼叫通知系统,以及即时通讯平台。
1.编写YML文件
vim /data/monitor/docker-compose-prometheus.yml
version: '3.2'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- 39090:9090
user: '0'
command:
- '--config.file=/etc/prometheus/prometheus.yml' #指定配置文件
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.path=/prometheus/data' #指定数据存储位置
- '--storage.tsdb.retention=31d' #指定数据存储天数
- '--web.listen-address="0.0.0.0:9090"' #指定监听地址及端口
- '--web.external-url=prometheus' #指定web访问路径
- '--web.read-timeout=5m' #超时时间(超时读取请求和关闭空闲连接之前的最长持续时间。)
- '--web.max-connections=20' #设置最大连接数(同时连接的最大数量)
- '--web.enable-lifecycle'
volumes:
- /etc/localtime:/etc/localtime
- /data/monitor/config/prometheus/:/etc/prometheus
- /data/monitor/data/prometheus/:/prometheus/data
2.编写prometheus主配文件
vim /data/monitor/config/prometheus/prometheus.yml
###################全局配置#########################
global:
scrape_interval: 1m #全局默认的数据拉取间隔(默认1m)
scrape_timeout: 10s #全局默认的单次数据拉取超时时间(默认10s)
evaluation_interval: 1m #全局默认的规则(主要是报警规则)拉取间隔(默认1m)
###################源数据配置#######################
scrape_configs:
- job_name: 'node_exporter'
scrape_interval: 5s
metrics_path: '/metrics'
file_sd_configs: #通过文件获取target信息
- files:
- 'modules/node.yml' #配置文件路径(需在主配同级创建 modules/obc.yml)
refresh_interval: 5s #target指标拉取间隔时长
#############################告警规则配置#############################
rule_files:
- "roles/*.yml" #告警配置文件位置
#############################alerting告警配置#########################
alerting:
alertmanagers: #告警名称
- scheme: http #消息发送方式
static_configs: #alertmanager地址配置
- targets:
- "127.0.0.1:39093"
3.编写prometheus的节点配置文件
vim /data/monitor/config/prometheus/modules/node.yml
# 测试数据
- labels:
service: "test" #设置模块标签
pingtai: "test" #设置模块标签
targets:
- 127.0.0.1:39100 #设置模块地址
4.编写prometheus告警文件
vim /data/monitor/config/prometheus/roles/test.yml
groups: #设置告警组
- name: 测试平台 #告警组名称
rules:
- alert: 服务状态 #规则名称
expr: up{service="cc",job=~".*"} == 0 #告警触发条件
for: 5s #告警检测间隔
labels:
severity: ERROR #告警携带标签
pingtai: "测试平台"
annotations: #设置自定义告警信息
summary: "{{ $labels.job }}模块 " #告警信息一
description: "业务模块异常停止-模块 [{{ $labels.job }}]异常停止超过1分钟。" #告警信息2
value: "{{ $value }}" #用于记录当前指标值
5.启动服务
docker-compose -f /data/monitor/docker-compose-prometheus.yml up -d
1.编写YML文件
vim /data/monitor/docker-compose-grafana.yml
version: '3.2'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- 33000:3000
user: '0'
volumes:
- /data/monitor/data/grafana/:/var/lib/grafana
- /data/monitor/data/grafana/provisioning/:/etc/grafana/provisioning/
environment:
- GF_SECURITY_ADMIN_USER=admin #设置管理员用户名
- GF_SECURITY_ADMIN_PASSWORD=admin #设置管理员密码
- GF_USERS_ALLOW_SIGN_UP=false
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_EXPLORE_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
- GF_AUTH_OAUTH_AUTO_LOGIN=true
- GF_SMTP_ENABLED=true
- GF_SMTP_HOST=smtp.exmail.qq.com:465 #设置SMTP发送信息
- [email protected]
- GF_SMTP_PASSWORD=123456
- [email protected]
2.启动服务
docker-compose -f /data/monitor/docker-compose-grafana.yml up -d
1.编写YML文件
vim /data/monitor/docker-compose-alertmanager.yml
version: '3.2'
services:
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
ports:
- 39093:9093
- 39094:9094
user: '0'
volumes:
- /etc/localtime:/etc/localtime:ro
- /data/monitor/data/alertmanager/:/alertmanager
- /data/monitor/config/alertmanager/:/etc/alertmanager
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager
2.编写alertmanager配置文件
vim /data/monitor/config/alertmanager/alertmanager.yml
########################全局配置##########################
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.cn:465' #设置邮件发送服务器地址
smtp_from: '[email protected]' #设置发件人
smtp_auth_username: '[email protected]' #设置发件人
smtp_auth_password: 'cbxxxxxxxxxxxxxx' #设置发件人密码
smtp_require_tls: false #是否启用TLS加密
#####################告警模板配置########################
templates:
- 'template/*.tmpl' #设置告警模板位置
####################告警路由配置#########################
route:
group_by: ['alertname']
group_wait: 5m
group_interval: 5m
repeat_interval: 6h
receiver: 'yunwei' #路由组名称
routes:
##########设置自定义路由规则
# - receiver: 'server-ERR' #路由名称
# group_wait: 30s #发送间隔
# continue: true
# match_re:
# severity: "ERR" #匹配prometheus的标签
####################告警发送配置########################
receivers:
- name: 'yunwei' #匹配路由组名称
email_configs:
- to: '[email protected]' #收件人
html: '{{ template "mail.html" . }}' #设置发送模板
headers: { Subject: "[WARN] 服务异常-测试平台"} #邮件标题
send_resolved: true
#webhook_configs: #设置webhook地址
# - url: 'http://172.0.0.1:31100/prometheusalert?type=fs&tpl=prometheus-fsv2&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/49b7cc23-4dff-4453-96a9-3bb80c5df704'
######################默认设置#############################
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3.编写邮件模板
vim /data/monitor/config/alertmanager/template/mail.tmpl
{{ define "mail.html" }}
{{ range .Alerts }}
【{{ .Labels.alertname }}告警】<br />"{{ .Labels.pingtai}}"主机: {{ .Labels.instance }} 于 {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} 触发告警,告警模块: [{{ .Labels.job }}],当前值:{{ .Annotations.value }} 详细信息: {{ .Annotations.description }}
<br />
{{ end }}
{{ end }}
4.启动模块
docker-compose -f /data/monitor/docker-compose-alertmanager.yml up -d
###################全局配置#########################
global:
scrape_interval: 1m #全局默认的数据拉取间隔(默认1m)
scrape_timeout: 10s #全局默认的单次数据拉取超时时间(默认10s)
evaluation_interval: 1m #全局默认的规则(主要是报警规则)拉取间隔(默认1m)
###################源数据配置#######################
##方法一:
scrape_configs:
- job_name: 'xxx' #配置模块名称
scrape_interval: 5s #刷新时间
metrics_path: '/' #自定义节点访问URL(默认/metrics)
static_configs:
- targets: #配置节点信息(可通过配置多个targets进行项目及环境区分)
- "127.0.0.1:20002" #配置节点地址
labels: #配置节点标签
service: 'xx' #lablename:lablevalue
env: 'production'
##方法二:
#引入配置文件配置节点
- job_name: 'test'
scrape_interval: 5s
metrics_path: '/'
file_sd_configs: #通过文件获取target信息
- files:
- 'modules/test.yml' #配置文件路径(需在主配同级创建 modules/obc.yml)
refresh_interval: 5s #target文件拉取间隔时长
#配置target节点文件
vim modules/test.yml
- labels: #配置标签
service: "test"
env: "production"
targets: #配置节点
- 127.0.0.1:8888
#可按照此模板配置多个从而进行项目及环境区分
##方法三:
#[]配置方式
- job_name: 'prometheus' #job名称
scrape_interval: 5s #刷新时间
metrics_path: '/pro' #自定义URL
static_configs:
- targets: ['127.0.0.1:39090'] #配置节点地址(多个节点以,隔开)
labels: #配置节点标签
service: 'cc'
env: 'production'
#############################告警规则配置#############################
rule_files:
- "roles/*.yml" #告警配置文件位置
#############################alerting告警配置#########################
alerting:
alertmanagers: #告警名称
- scheme: http #消息发送方式
static_configs: #alertmanager地址配置
- targets:
- "127.0.0.1:39093"