Prometheus(普罗米修斯)监控平台初入

# 简介

- 一个监控服务器,也是一个时序数据库TSDB
- 有专门的PQL,即Prometheus查询语言
- 基于go语言开发
- 可以监控主机,也可以监控容器
- 官网:https://prometheus.io/
- exporter的地址:https://prometheus.io/docs/instrumenting/exporters/
- node_exporter的下载地址:https://prometheus.io/download/
- 告警配置,规则配置等的参考文档:https://samber.github.io/awesome-prometheus-alerts/

# 启动

./prometheus --config.file=prometheus.yml --web.enable-lifecycle

# 如果配置了--web.enable-lifecycle,那么改变了prometheus.yml,可以执行下面的命令加载配置
curl -X POST http://localhost:9090/-/reload

# nginx监控

两种方案对nginx进行监控,第一种是nginx自带的stub_status模块进行监控,第二种是用vts监控工具进行监控。这两种方案都是基于prometheus于grafana结合三方模块或者监控工具搭建的。

## tub_status模块监控

# 1.如果有输出with-http_stub_status_module,说明启用了stub_status模块,如果没有就需要对nginx源码重新编译安装
nginx -V 2>&1 | grep -o with-http_stub_status_module

# 2.确认开启了之后,修改nginx的配置:
server {
    location = /status {
        stub_status on;# nginx_status;两个待确认
        access_log off;
    }
}

# 3.启动nginx-prometheus-exporter 下载的地址:https://github.com/nginxinc/nginx-prometheus-exporter/releases
nohup ./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:80/nginx_status &

# 4.prometheus.yml中添加被监控的节点
# 采集nginx的指标
- job_name: 'nginx_status_module'
  # 拉取指标的接口路径
  metrics_path: '/metrics'
  # 采集指标的间隔周期
  scrape_interval: 10s
  static_configs:
  # nginx-prometheus-exporter服务的ip和端口
  - targets: ['127.0.0.1:9113']

# 5.在grafana中导入模板,模板链接:https://grafana.com/grafana/dashboards/12708

## vts工具监控

# 1.vts模块下载,链接:https://github.com/vozlt/nginx-module-vts

# 2.解压放到nginx目录下,nginx源码重新编译安装

# 3.修改nginx的配置文件
#nginx配置server中添加:
location /status {
        vhost_traffic_status_display;
        vhost_traffic_status_display_format html;
        }
    }

#http中添加:
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;

# 4.启动nginx后访问:http://localhost/status,确认是否有数据

# 5.启动nginx-vts-exporter
nginx-vts-exporter  -nginx.scrape_uri=http://172.17.9.70/status/format/json

# 6.修改prometheus.yml
- job_name: 'nginx'
  static_configs:
  - targets: ['172.17.9.70:9913']  #9913为工具启动的端口
    labels:
      instance: nginx
      
# 7.导入grafana模板:https://grafana.com/grafana/dashboards/2949

# java应用监控

JMX-Exporter 提供了两种用法:

- 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX-Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
- JVM 进程内启动(in-process)。JVM 启动时指定参数,通过 javaagent 的形式运行 JMX-Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,所以普遍使用第二种方式

jmx_exporter的地址:https://github.com/prometheus/jmx_exporter

java -javaagent:./jmx_prometheus_javaagent-0.19.0.jar=12345:config.yaml -jar yourJar.jar

config.yaml的简版配置:

rules:
- pattern: ".*"

grafana的模板:8563,7727

# alertmanager告警

下载alertmanager:https://prometheus.io/download/

修改配置文件alertmanager.yml

global:
  # 恢复的超时时间,这个跟告警恢复通知有关,此参数并不是说在这个时间没有收到告警就会恢复
  resolve_timeout: 5m
  # 邮件服务器:端口
  smtp_smarthost: 'smtp.qq.com:465'
  # 发送人
  smtp_from: '841677557@qq.com'
  # 发生的邮箱账号
  smtp_auth_username: '841677557@qq.com'
  # 授权码或密码
  smtp_auth_password: '123456'
  # 请求TLS,false即可
  smtp_require_tls: false

route:
  # 默认以告警名进行分组,就是rule文件的alert值进行分组
  group_by: ['alertname']
  # 发送警报前,至少等待多少秒才会发送(为了收集同组更多的警报信息一起发送)
  group_wait: 10s
  # 如果警报1已经发送,这时又出现同组的警报2,由于组状态发生变化,警报会在group_interval这个时间内发送,不会被repeat_interval这个时间收敛
  group_interval: 10s
  # 报警信息已发送,但事件并没有恢复,则等待多久时间再重新发送(生产环境一般设成20min或者30min)
  repeat_interval: 20m
  # 发送警报的接收器名称,即对应下面的<receivers>配置段中的<name>值
  # 如果一个报警没有被下面的<routes>配置段中的<receiver>字段匹配,则发送给这个默认的接收器
  receiver: 'devops.webhook'

  # 为node_exporter、docker、mysqld_exporter等的Job定义匹配路由,每个路由有自己的分组在告警时信息就会单独发送到对应的组
  routes:
  # 每个服务可以定义自己的接收者,这样在发送时就可以发送给不同的人,不同的服务对应不同的处理人员,需要对应下面<receivers>配置段中的<name>值
  - receiver: 'devops.mail'
    # 组等待时间,同上面的全局配置一个意思
    group_wait: 10s
    group_by: ['node_exporter']
    match_re:
      # 匹配分组,即使用prometheus中的labels标签信息进行匹配分组发送告警,ps: 分组发送的关键点
      job: node2

  - receiver: 'devops.webhook'
    group_wait: 10s
    group_by: ['geth']
    match_re:
      job: geth2

  - receiver: 'devops.mailwechat'
    group_wait: 10s
    group_by: ['mysqld_exporter']
    match_re:
      job: mysqld_exporter

# 发送告警信息给哪个接收者
receivers:
# 这个需要和上面全局默认<receiver>或者<routes>中的<receiver>值定义的接收者名称一致
- name: 'devops.webhook'
  webhook_configs:
  - url: 'http://192.168.4.88:5001/webhook'

- name: 'devops.mail'
  email_configs:
  - to: 'luzhining@guangzhoudaze.com'
    # 邮件主题
    headers: { Subject: "[WARN] Prometheus 报警邮件" }
    # 发送告警恢复通知
    send_resolved: true

# 将这个告警同时发送到邮件和企业微信
- name: 'devops.mailwechat'
  email_configs:
  - to: '841677557@qq.com'
    headers: { Subject: "[WARN] Prometheus 报警邮件" }
    send_resolved: true

  # 企业微信配置
  wechat_configs:  
    # 第三方企业应用的密钥,可以在自己创建的第三方企业应用详情页面查看。
  - api_secret: 'ERDiPpoFB3IezMgj8yDksP5anY27__gM_TVkZGk28VY'
    # 第三方企业应用的 ID,可以在自己创建的第三方企业应用详情页面查看。
    agent_id: '1000082'
    # 企业微信账号唯一 ID, 可以在我的企业中查看。
    corp_id: 'wx2b1e95bda2a7b974'
    # 需要发送的组/部门。
    to_party: '1366'
    send_resolved: true

# 抑制规则,防止告警风暴
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'env', 'instance']

# 配置推送通知的模板
templates:
  - '/app/alertmanager/wechat.tmpl'

启动命令参考:

./alertmanager --config.file=./alertmanager.yml --storage.path="./alertmanager/data/"   --data.retention=120h

# 启动后更新配置文件,可以直接加载,也可以访问9093端口确认
curl -X POST http://localhost:9093/-/reload

完善下prometheus的配置文件prometheus.yml

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 127.0.0.1:9093

rule_files:
  - "rules/*.yml"

企业微信的告警模板(wechat.tmpl):

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========故障告警==========
告警类型:{{ $alert.Labels.alertname }}
故障主机:{{ $alert.Labels.instance }}
告警详情:{{ $alert.Annotations.summary }}
触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 }}
==========故障恢复==========
告警类型:{{ $alert.Labels.alertname }}
故障主机:{{ $alert.Labels.instance }}
告警详情:{{ $alert.Annotations.summary }}
触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

# node_exporter

node_exporter的下载地址:https://prometheus.io/download/

[Unit]
Description=node_exporter
After=network.target

[Service]
Type=forking
User=jssuz.dev
ExecStart=/app/node_exporter-1.7.0.linux-amd64/node_exporter --collector.systemd --collector.systemd.unit-include=(node_exporter|nginx).service

[Install]
WantedBy=multi-user.target

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值