Prometheus监控系统

3-04 248 views

前言:prometheus作为目前流行的一套监控系统,主要由三大件组成 prometheus(主监控服务)node_exporter(指标采集服务)Alertmanager(报警管理服务)Prometheus Server负责定时在目标上抓取metrics(指标)数据并保存到本地存储里面。Prometheus采用了一种Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端可以更加方便的水平扩展。Prometheus支持PromQL提供多维度数据模型和灵活的查询,通过监控指标关联多个tag的方式,将监控数据进行任意维度的组合以及聚合。

 

一、环境准备

192.168.114.5       Prometheus Server

192.168.114.6        node_exporter

 

版本:这边尝试最新的版本(2021-03-04)

系统版本:CentOS Linux release 7.6.1810 (Core)

Prometheus:最新的prometheus-2.25.0.linux-amd64.tar.gz 版本

Alertmanager:最新的alertmanager-0.21.0.linux-amd64.tar.gz版本

node_exporter:最新的node_exporter-1.1.1.linux-amd64.tar.gz版本

软件包下载地址:https://prometheus.io/download/

二、部署Prometheus Server

创建prometheus用户:

#groupadd prometheus

#useradd g prometheus m d /var/lib/prometheus s /sbin/nologin prometheus     参数解释 -g指定用户组 -m创建用户家目录 -d 指定家目录地址 -s 设置该用户不能用于登录

下载安装包:

# cd /usr/local/src/

# wget https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.freebsd-amd64.tar.gz

# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

# wget https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_exporter-1.1.1.linux-amd64.tar.gz

 

解压安装包:

# tar xvf prometheus-2.25.0.freebsd-amd64.tar.gz -C /usr/local/

# cd /usr/local && mv prometheus-2.25.0.freebsd-amd64/ prometheus

# chown -R prometheus.prometheus prometheus/

创建系统启动prometheus服务脚本:

基础知识传输门:centos7版本系统systemd服务脚本详解链接

 

#vim /usr/local/prometheus/prometheus

[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus –config.file=/usr/local/prometheus/prometheus.yml –storage.tsdb.path=/var/lib/prometheus –storage.tsdb.retention=15d –log.level=info
Restart=on-failure
[Install]
WantedBy=multi-user.target

 

三、安装node_exporter

在两台机器都需要安装上node_exporter

# tar xvf node_exporter-1.1.1.linux-amd64.tar.gz -C /usr/local/

# cd /usr/local/ && mv node_exporter-1.1.1.linux-amd64/ node_exporter

# chown -R prometheus.prometheus node_exporter/

 

创建node_exporter启动脚本

# vim /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动node_exporter服务

systemctl start node_exporter.service

ss -tnl | grep 9100

node_exporter服务定期将linux系统的各项硬件指标和内核参数通过9100端口和url metrics暴露给外部。

浏览器里输入192.168.114.5:9100/metrics就可以访问到node explorer收集到的各项参数:

四、配置prometheus添加监控目标

# cd /usr/local/prometheus

# vim prometheus.yml

在后面新增一段,对另一台机器的监控

– job_name: ‘114.5’
scrape_interval: 5s
static_configs:
– targets: [‘192.168.114.5:9100’]

启动prometheus服务

启动失败了,我检查下启动命令,手动启动下并通过strace追踪下,发现如下报错:

# strace -i /usr/local/prometheus/prometheus –config.file=/usr/local/prometheus/prometheus.yml –storage.tsdb.path=/var/lib/prometheus –storage.tsdb.retention=15d –log.level=info
[00002b958fd10be7] execve(“/usr/local/prometheus/prometheus”, [“/usr/local/prometheus/prometheus”, “–config.file=/usr/local/prometh”…, “–storage.tsdb.path=/var/lib/pro”…, “–storage.tsdb.retention=15d”, “–log.level=info”], [/* 24 vars */]) = 0
[0000000000470144] — SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} —
[????????????????] +++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

关机shutdown -h now并调整内存为4g试试—–并没有用。

应该是那台机器环境有问题,将包放到其他机器上是可以正常运行的。

调整下192.168.114.5为 prometheus服务端

启动成功!

 

五、访问prometheus web

Prometheus WEB 查看我们定义的目标主机:http://192.168.114.5:9090/targets

 

六、配置监控项

prometheus 通过alertmanager进行告警

实现监控告警的步骤:

  • 在prometheus中定义告警规则rule_files
  • alertmanager配置告警告警动作,分组,抑制,静默等功能
  • alertmanager安装route定义的规则向终端:邮箱,企业微信等发生告警信息

在prometheus 服务端安装alertmanager,当然也可以安装在独立机器上,这边和prometheus安装在同一台机器上

# tar xvf alertmanager-0.21.0.linux-amd64.tar.gz

# chown prometheus.prometheus alertmanager -R

alertmanager主配置文件: alertmanager.yml内容标注

global:                # 全局配置
  resolve_timeout: 5m  #解析超时时间

route:             # 配置告警发送,接受规则
  group_by: ['alertname']  # 根据标签分组
  group_wait: 10s          # 发送告警等待时间,为了合并相同告警一起发送
  group_interval: 10s      # 发送告警间隔时间
  repeat_interval: 10m      # 重复告警时间,控制发送告警频率,根据情况设置
  receiver: 'web.hook'     # 定义接收者类型:mail,wechat等
receivers:        # 定义告警发给谁
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:   # 告警抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

 

定义一个邮箱报警配置:

global:
  resolve_timeout: 5m

  smtp_smarthost: 'smtp.163.com:25' # 定义163邮箱服务器端
  smtp_from: 'yi_cheng_yu@163.com'  #来自哪个邮箱发的
  smtp_auth_username: 'yi_cheng_yu@163.com' #邮箱验证
  smtp_auth_password: 'XXXXXXXX'   # 邮箱授权码,不是登录密码
  smtp_require_tls: false   # 是否启用tls

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 3m  # 发送告警后间隔多久再次发送,减少发送邮件频率
  receiver: 'mail'    #发送的告警媒体

receivers:
- name: 'mail'        # 接收者配置,这里要与接收媒体一致
  email_configs: 
  - to: '630885834@qq.com' #发送给谁的邮箱,多个人多行列出
    send_resolved: true    #是否发送报警恢复邮件
#inhibit_rules:
#  - source_match:
#      severity: 'critical'
#    target_match:
#      severity: 'warning'
#    equal: ['alertname', 'dev', 'instance']


检查配置是否合法:
./amtool check-config alertmanager.yml

将alertmanager配置成系统服务

vim /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/alertmanager/alertmanager –config.file=/usr/local/alertmanager/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target

 

启动alertmanager

# systemctl start alertmanager.service

 

七、prometheus与alertmanager通信

上面的配置只是配置alertmanager报警服务,接下来配置prometheus与alertmanager的通信

配置prometheus告警规则 官方配置文档参考:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

修改prometheus.yml配置文件

#启用如需配置段

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 127.0.0.1:9093

# 配置告警规则
rule_files:
   - "rules.yml"   # 默认路径在配置文件同级目录下

编辑rules.yml文件
groups:     # 报警组
- name: Node
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0   # 监控状态的值为 0时,说明服务异常,1为正常
    for: 5m  # 保持时间,上面的状态持续时间内都为 0 ,则触发告警
    labels:
      severity: error
    annotations:
      summary: "Instance {{ $labels.instance }} 停止工作"
      description: "{{ $labels.instance }} of job {{ $labels.job }} 已经停止1分钟以上."

检查prometheus.yml配置文件

# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 1 rule files found

Checking rules.yml
SUCCESS: 1 rules found

重启prometheus服务

# systemctl restart prometheus.service

重启prometheus后在prometheus服务端页面中的alters中可以看到rules

 

测试:

将192.168.114.6节点的node_exporter服务停止掉

# systemctl stop node_exporter.service

一会后http://192.168.114.5:9090/alerts中的状态为Firing,此时邮件已经发出去了,登录邮箱已经看到告警邮件了,恢复的话也会收到恢复邮件

 

告警状态:

  • Inactive : 正常状态
  • Pending : 已经触发阈值,但还未满足告警持续时间
  • Firing : 已经触发阈值并且满足告警持续时间,警报发送给了接收者
  • 分组: 将类似性质的告警分类成单个通知

修改alertmanager.yml文件:

route:             # 配置告警发送,接受规则
  group_by: ['alertname']  # 根据标签分组
  group_wait: 10s          # 发送告警等待时间,为了合并相同告警一起发送
  group_interval: 10s      # 发送告警间隔时间
  repeat_interval: 10m      # 重复告警时间,控制发送告警频率,根据情况设置

 

  •  抑制: 当告警发出后,将停止重复发送由此报警引发的其他告警,消除冗余的告警

修改alertmanager.yml文件:

inhibit_rules:
  - source_match:  # 高级别告警源
      severity: 'critical'  
    target_match:   # 低级别的告警被抑制不会发送
      severity: 'warning'  
    equal: ['alertname', 'dev', 'instance']  #抑制匹配
  • 静默: 是一种简单的特定时间静音提醒的机制

配置静默通过alertmanager服务的9093端口服务,界面创建静默规则

http://192.168.114.5:9093/#/silences

 

八、自定义监控

比如监控内存的例子:

将自定义的告警规则写到独立的文件中,编辑prometheus.yml中rule_file引用如下:

rule_files:
   - "rules/*.yml"

 

告警规则中 expr 条件表达式先在Prometheus的 PromQL 中测试能查询结果,确保无语句语法错误。如查询内存的可用率,如下:

node_memory_MemAvailable_bytes{job=”114.6″}/node_memory_MemTotal_bytes{job=”114.6″}*100 < 70    内存可用率小于70%,并指定了job

 

测试 expr 条件表达式没问题后,可以编写rules文件了

#mkdir rules && cd rules && vim memory.yml

groups:   # 告警分组
- name: Node-server.rules  # 组名称
  rules:                #告警规则

  - alert: System Memory Used  # 告警主题名称
    expr: node_memory_MemAvailable_bytes{job="114.6"}/node_memory_MemTotal_bytes{job="114.6"}*100 < 70 # 告警阈值
    for: 1m # 阈值持久时间
    labels:   # 标签,定义告警级别
      severity: warning
    annotations:   # 告警描述信息
      summary: "Instance {{ $labels.instance }} : {{ $labels.job }} 内存使用率过高 "
      description: "{{ $labels.instance }} : {{ $labels.job }} 内存可用率已不足70%.当前值: {{ $value }}" # {{ $value }} 调用的是上面的promeSQL的值

 

检查配置:

# ./promtool check config prometheus.yml

重启prometheus服务

# systemctl restart prometheus.service

可以看到已收到报警邮件了:

上面是通过node_exporter组件收集的系统指标,可尝试收集自己脚本的指标:

 

 

 

参考:

https://my.oschina.net/u/4357584/blog/3346109

https://my.oschina.net/u/4357584/blog/3346110

 

为Kubernetes v1.5.2版本安装dashboard图形界面

一、前言 dashboard是一个图形化管理界面,由于我这边的Kubernetes v1.5.2比较老,按官网的安装方法没有效果,现在试试手动安装,使用下面2个yaml文件安装 ...

阅读全文

k8s简单部署

K8s中文手册地址:https://www.kuboard.cn/learning/k8s-basics/kubernetes-basics.html#kubernetes%E5%8A%9F%E8%83%BD   这边安装的Kubernetes v1.5.2 比较...

阅读全文

centos7上openvpn搭建详细教程

写在前面的前言: 因为工作需要安全连接公司的内网机器。对比了几个vpn的配置及工作模式。安全性:openvpn>l2tp/ipsec>pptp ,当然还有ss+代理的模式。...

阅读全文

欢迎留言