prometheus监控nginx指标
下载及解压所以文件
prometheus 下载地址:https://prometheus.io/download/
nginx-exporter 下载地址:https://github.com/nginxinc/nginx-prometheus-exporter/releases
alertmanager 下载地址:https://prometheus.io/download/
grafana 下载地址:https://grafana.com/grafana/download?edition=oss
编辑prometheus配置文件
vim prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.223.146:9093 # 默认是注释的,改成grafana地址用于告警
rule_files:
- "rules/*.yml" # 创建统一告警文件
# - "second_rules.yml"
#添加 (注意格式,targets 就算是本机也要写ip,不然访问指标/metrics 502报错)
- job_name: 'nginx_status_module' # 采集nginx的指标,名称可以自定义。
scrape_interval: 10s # 采集指标的间隔周期,默认是15秒可以按需求改。
static_configs:
- targets: ['192.168.223.146:9113'] # nginx-prometheus-exporter #服务的ip和端口
- job_name: "alertmanager"
static_configs:
- targets: ["192.168.223.146:9093"]
启动prometheus
nohub ./prometheus --config.file=prometheus.yml & #--config.file指定配置文件
访问localhost:9090
安装nginx
查看nginx是否有nginx_stub_status
开源nginx提供了一个简单页面用于展示状态数据,该页面由tub_status模块提供,如果已在本地服务安装nginx,进入nginx/sbin目录下执行
./nginx -V 2>&1 | grep -o with-http_stub_status_module # 二进制安装执行命令
docker:docker exec nginx nginx -V 2>&1 | grep -o with-http_stub_status_module # docker安装执行命令
如果在终端输出with-http_stub_status_module,说明nginx已启用tub_status模块
确认stub_status模块启动之后,修改nginx配置文件新增一个server服务单独给prometheus访问
server {
listen 8080;
#端口可以自己重新起一个
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; #白名单
deny all; #指定白名单除外无法访问
}
}
启动 nginx-exporter
nohup ./nginx-prometheus-exporter -nginx.scrape-uri http://192.168.223.146:8080/nginx_status &
配置 alertmanager
vim alertmanager.yml
global:
resolve_timeout: 5m #当告警的状态由firing变为resolve时,需等待5min,如果报警未更新,则声明该告警已解决。可略微调高阈值避免重复告警。
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '330****45@qq.com'
smtp_auth_username: '330****45@qq.com'
smtp_auth_password: 'drujbwlhzckcchhi' # 这个密码需要生成,非QQ密码
smtp_require_tls: false
templates:
- '/data/alertmanager-0.25.0.linux-amd64/email.tmpl'
route:
group_by: ['service','alertname','cluster'] ##根据label进行分组。--cluster可创建集群
group_wait: 30s ##触发告警后,等待30s发送
group_interval: 5m ##时间间隔
repeat_interval: 1h ##重复发送
receiver: 'email'
receivers: ###告警的处理方式email
- name: 'email'
email_configs: ##告警转发到对应邮箱地址
- to: '71*****51@qq.com'
html: '{{ template "email.to.html" . }}'
send_resolved: true
inhibit_rules: ###添加抑制规则
- source_match: ####根据label匹配源告警
severity: 'critical'
target_match: ####根据label匹配目的告警
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
创建邮件模板文件
vim email.tmpl
{{ define "email.to.html" }}
{{ if gt (len .Alerts.Firing) 0 }}{{ range .Alerts }}
@告警: <br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt }} <br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}{{ range .Alerts }}
@恢复: <br>
告警主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
恢复时间: {{ .EndsAt }} <br>
{{ end }}
{{ end }}
{{ end }}
启动 alertmanager
nohub ./alertmanager --config.file=alertmanager.yml &
访问:http://192.168.223.146:9093/
prometheus 创建rules文件
vim nginx_export-alert-rules.yml
groups:
- name: nginx状态-监控告警
rules:
- alert: nginx状态
expr: nginx_up == 0
for: 1s
labels:
serverity: warning
status: 非常严重
annotations:
summary: "{{$labels.instance}}:nginx服务停止"
description: "nginx服务down"
重启prometheus
测试停止nginx查看告警
启动grafana
nohub ./grafana-server &
访问:http://localhost:3000 ,添加数据源。
nginx-exporter图形码(grafana):12708
nginx监控指标说明
- nginx_connections_active nginx连接活动数
- nginx_connections_handled nginx已处理的连接
- nginx_connections_reading nginx连接_读取
- nginx_connections_waiting nginx连接_等待
- nginx_connections_writing nginx连接_写入
- nginx_http_requests_total nginx请求总数
- nginx_up nginx存活状态1正常 0异常
- nginxexporter_build_info nginxexporter状态1正常 0异常