电话报警可使用(OpsAlert) 支持电话告警、短信报警、邮件告警、微信报警,直接使用WebHook配置即可,比较简单。
下载安装(我使用是Centos 7.x的系统,选择对应的平台下载最新版本)
cd /data && mkdir prometheus
cd prometheus/
wget https://github.com/prometheus/prometheus/releases/download/v2.9.2/prometheus-2.9.2.linux-amd64.tar.gz
tar -zxvf prometheus-2.9.2.linux-amd64.tar.gz
cd prometheus-2.9.2.linux-amd64/
prometheus配置文件
# 全局配置
global:
scrape_interval: 15s # 设置拉取targets间隔时间为15s,默认是1分钟
evaluation_interval: 15s # 设置执行rules的间隔时间为15s,默认是1分钟
scrape_timeout: 10s # 设置拉取target拉取的超时时间为10s,默认是10s
# external_labels:
# [ <labelname>: <labelvalue> ... ] # 额外的属性,会添加到拉取的数据并存到数据库中
# Alertmanager 报警组件配置
alerting:
# alert_relabel_configs:
# [ - <relabel_config> ... ] # 动态修改alert属性的规则配置
alertmanagers: # 配置Alertmanager组件的IP和端口(也可动态发现)
- static_configs:
- targets:
- localhost:9093
# 加载规则配置文件
rule_files:
- /data/prometheus/prometheus/rules/*.rules
# 数据拉取配置(拉取节点数据)
scrape_configs:
# 这个job_name会添加一个`job=<job_name>`的labels到没指标上
- job_name: 'prometheus' # job名称
# 默认的path是 '/metrics'
# 默认是http协议
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['127.0.0.1:9100']
consul_sd_configs: # 服务发现consul配置
- server: 127.0.0.1:8500 # consul的地址和端口
token: '70a4152b-c205-d286-43d7-01472fcdddq8' # consul的访问Token(Bootstrap Token)
services: []
relabel_configs: # 拉取数据重置标签配置
- source_labels: [__address__]
regex: 127.0.0.1:8300 # 正则配置规则
action: drop # 过滤掉匹配的
# 其他选项
# honor_labels: 用于解决拉取数据标签有冲突,当设置为 true, 以拉取数据为准,否则以服务配置为准
# params:数据拉取访问时带的请求参数
# scrape_interval: 拉取时间间隔
# scrape_timeout: 拉取超时时间
# metrics_path: 拉取节点的 metric 路径
# scheme: 拉取数据访问协议
# sample_limit: 存储的数据标签个数限制,如果超过限制,该数据将被忽略,不入存储;默认值为0,表示没有限制
# metric_relabel_configs:metric 重置标签配置
# remote_write: # 用于可写远程存储配置
# url: # 访问地址
# remote_timeout: # 请求超时时间
# write_relabel_configs: # 标签重置配置, 拉取到的数据,经过重置处理后,发送给远程存储
# remote_read: # 用于可读远程存储配置
# url: # 访问地址
# remote_timeout: # 请求超时时间
服务发现
- prometheus的配置中数据源targets,主要分为静态配置和动态发现,如下:
- static_configs: 静态服务发现
- dns_sd_configs: DNS 服务发现
- file_sd_configs: 文件服务发现
- consul_sd_configs: Consul 服务发现
- serverset_sd_configs: Serverset 服务发现
- nerve_sd_configs: Nerve 服务发现
- marathon_sd_configs: Marathon 服务发现
- kubernetes_sd_configs: Kubernetes 服务发现
- gce_sd_configs: GCE 服务发现
- ec2_sd_configs: EC2 服务发现
- openstack_sd_configs: OpenStack 服务发现
- azure_sd_configs: Azure 服务发现
- triton_sd_configs: Triton 服务发现
这里是我用到的配置,更多的具体使用以及配置模板,请参考官网文档
使用比较广泛的是static_configs,其实那些动态类型都可以看成是某些通用业务使用静态服务封装的结果。
因我用到consul所以说下consul_sd_configs,具体配置如上文,meta标签在relabeling期间在目标上仍然是可用的,如下:
- __meta_consul_address: 目标地址
- __meta_consul_dc: 目标的数据中心名称
- __meta_consul_node: 目标的节点名称
- __meta_consul_service_address: 目标的服务地址
- __meta_consul_service_id: 目标的服务ID
- __meta_consul_service_port: 目标的服务端口
- __meta_consul_service: 这个目标属于哪个服务名称
- __meta_consul_tags: 由标签分隔符链接的目标的标签列表
也可通过prometheus页面查看,如:http://127.0.0.1:9090/service-discovery
PS:用于获取目标的IP和PORT,被组装到<__meta_consul_address>:<__meta_consul_service_port>。然而,在一些Consul创建过程中,这个相关地址在__meta_consul_service_address。可以使用relabel特性去替换指定的__address__标签。
prometheus启动命令
/data/prometheus/prometheus/prometheus \
--config.file=/data/prometheus/prometheus/prometheus.yml \ # 指定配置文件
--storage.tsdb.path=/data/prometheus/prometheus/data \ # 监控数据存储位置
--web.console.libraries=/data/prometheus/prometheus/console_libraries
--web.console.templates=/data/prometheus/prometheus/consoles
--web.enable-admin-api # 开启管理api
PS:reolad配置可以通过给Prometheus服务发送信号量SIGHUP或通过http发送一个post请求到/-/reload,同时也会重载所有配置的规则文件(rule files)。
更多参数可 prometheus -h 查看帮助(部分参数是和配置文件重叠的)
创建prometheus启动文件(systemd)
[root@cmdb system]# cd /usr/lib/systemd/system
[root@cmdb system]# cat prometheus.service
[Unit]
Description=prometheus server daemon
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
ExecStart=/data/prometheus/prometheus/prometheus --config.file=/data/prometheus/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/prometheus/data --web.console.libraries=/data/prometheus/prometheus/console_libraries --web.console.templates=/data/prometheus/prometheus/consoles
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
[root@cmdb system]# systemctl daemon-reload
[root@cmdb system]# systemctl start prometheus.service
DEMO
启动后访问http://127.0.0.1:9090