Prometheus+Grafana监控告警

大数据监控告警系统

Prometheus(普罗米修斯)

特点介绍

1、核心部分为单独的二进制文件,不存在任何的第三方的依赖(诸如数据库、缓存之类),唯一需要的就是本地磁盘,它采用的是Pull拉取模型的方式,由于是自主拉去,那就可以在任何地方(local环境、dev环境、test环境)搭建监控系统,它还自带服务发现的能力,动态管理监控

2、Prometheus提供丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获得服务和应该内部真正的运行状态

3、所有采集到的监控数据都是以指标的形式保存在内置的时间序列数据库TSDB当中,所有的样本除了基础的指标名称之外,还包含一组可以用于描述该样本特征的标签

4、自带查询语言PromQL,可以使用该语言对监控的数据进行查询、聚合,当时也可应用于Grafana以及告警当中

5、可以在每个单独的数据中心,运行Prometheus Server,也可以支持逻辑上的集群(多个 Prometheus 实例)

6、集成性能好、性能高效,可以支持多种语言客户端的SDK,也可以支持与其他监控系统进行集成,自带UI展示的界面,图形化的可视化

基本架构

官网原图,人为分成三部分,已用黑线隔开,采集—>存储计算—>应用,可以看作是一个OLAP系统,按照维度存储的模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mIGrYtPB-1639307509331)(F:/ZNV/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%9B%91%E6%8E%A7%E5%91%8A%E8%AD%A6%E7%B3%BB%E7%BB%9F/image-20211024195846833.png)]

上图解释

1、采集

采集通过两种方式:Pushgateway、exporters,两种方式分为两类:一类是生命周期较短的作业,一类是生命周期较长的作业;

短作业:直接通过API,在推出的时候将指标推给Pushgateway(主要是因为正常情况下可以直接采用拉的模式从产生指标的作业或者exporter拉取数据,但有些作业让其自动发现比较困难,所以可以利用Pushgateway作为中转组件)

长作业:Retrieval组件直接从Job或者Exporter拉取数据

2、存储计算

Prometheus Server 包含存储、计算引擎;Retrieval是专门取数据的组件,对接采集层;TSDB是存储时间序列的数据;HTTP Server是对外提供HTTP服务

3、应用

上方为:AlertManager:后续对接Pagerduty,是一套付费的监控报警系统,比如发短信,打电话、通知值班人员、发邮件…;下方为数据可视化方面:自带的Prometheus UI、Grafana、其他可视化组件

相关部署

Prometheus相关配置

Prometheus本身使用Go语言编写

[root@lv94 prometheus-2.29.1]# ls
console_libraries  data     NOTICE      prometheus.log  promtool
consoles           LICENSE  prometheus  prometheus.yml

# 配置文件就是prometheus.yml
# 分为三部分:全局配置、告警配置、自身配置

  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["172.16.6.14:9090"]

 # 添加 PushGateway 监控配置
  - job_name: 'pushgateway'
    static_configs:
    - targets: ['172.16.6.14:9091']
      labels:
        instance: pushgateway

# 添加 Node Exporter 监控配置节点
  - job_name: 'node exporter'
    static_configs:
    - targets: ['172.16.6.14:9100']

pushgateway

[root@lv94 pushgateway-1.4.1]# ls
LICENSE  NOTICE  pushgateway  pushgateway.log

alertmanager

[root@lv94 alertmanager-0.23.0]# ls
alertmanager  alertmanager.log  alertmanager.yml  amtool  data  LICENSE  NOTICE

node_exporter

多节点需要分发到每个节点,以及Prometheus配置文件中的node_exporter需要配置节点

[root@lv94 node_exporter-1.2.2]# ls
LICENSE  node_exporter  NOTICE

开机自启

# 创建service文件
sudo 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=atguigu
ExecStart= /opt/module/node_exporter-1.2.2/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

# 分发到各节点

# 所有节点设置为开机自启并且启动服务
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service

启动Prometheus

都需进入对应目录

# 启动node_exporter
./node_exporter

# 启动Prometheus
nohup ./prometheus --config.file=prometheus.yml > ./prometheus.log 2>&1 &

# 启动pushgateway
nohup ./pushgateway --web.listen-address :9091 > ./pushgateway.log 2>&1 &

# 启动alertmanager
nohup ./alertmanager --config.file=alertmanager.yml > ./alertmanager.log 2>&1 &

# 启动web端端口为9090,可登录查看
172.16.6.14:9090

都是up表示正常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vm4V2s7Z-1639307509332)(F:/ZNV/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%9B%91%E6%8E%A7%E5%91%8A%E8%AD%A6%E7%B3%BB%E7%BB%9F/image-20211210200850099.png)]

PromQL

# 点击web端的Prometheus可出现查询页面
# 拿prometheus_http_requests_total举例
# 过滤code="302"
prometheus_http_requests_total{code="302"} 

# 时间范围 1分钟=[1m] 1秒=[1s] 1小时=[1h] 1天=[1d] 1周=[1w] 1年=[1y]
prometheus_http_requests_total{}[1m]

# 支持使用正则表达式作为匹配条件,多个表达式之间使用 | 进行分离
prometheus_http_requests_total{environment=~"staging|testing|development",method!="GET"}

# 时间位移操作,5分钟前数据 时刻
prometheus_http_requests_total{} offset 5m
# 昨天1天内的数据 时间区间
prometheus_http_requests_total{}[1d] offset 1d

# 聚合操作
# 查询系统所有 http 请求的总量
sum(prometheus_http_requests_total)
# 按照 mode 计算主机 CPU 的平均使用时间
avg(node_cpu_seconds_total) by (mode)
# 按照主机查询各个主机的 CPU 使用率
sum(sum(irate(node_cpu_seconds_total{mode!='idle'}[5m])) / sum(irate(node_cpu_seconds_total [5m]))) by (instance)


# 运算符
# 大于1000返回1(true)
prometheus_http_requests_total > bool 1000

# 聚合类窗口函数
# 获取 HTTP 请求数前 5 位的时序样本数据,可以使用表达式:
topk(5, prometheus_http_requests_total)

Grafana集成

同样也是go语言编写,用来可视化展示

grafana

[root@lv94 grafana-8.1.2]# ls
bin   LICENSE    plugins-bundled  README.md  VERSION
conf  NOTICE.md  public           scripts

# 运行
nohup ./bin/grafana-server web > ./grafana.log 2>&1 &

# web
端口是3000,用户名和密码默认是admin

# 添加数据源
# 进行展示

群起脚本

只是启动了prometheus、pushgateway、grafana

#!/bin/bash
case $1 in
"start"){
 echo '----- 启动 prometheus -----'
 nohup /usr/local/soft/prometheus-2.29.1/prometheus --web.enable-admin-api --config.file=/usr/local/soft/prometheus-2.29.1/prometheus.yml > /usr/local/soft/prometheus-2.29.1/prometheus.log 2>&1 &
 echo '----- 启动 pushgateway -----'
 nohup /usr/local/soft/pushgateway-1.4.1/pushgateway --web.listen-address :9091 > /usr/local/soft/pushgateway-1.4.1/pushgateway.log 2>&1 &
 echo '----- 启动 grafana -----'
 nohup /usr/local/soft/grafana-8.1.2/bin/grafana-server --homepath /usr/local/soft/grafana-8.1.2 web > /usr/local/soft/grafana-8.1.2/grafana.log 2>&1 &
};;
"stop"){
 echo '----- 停止 grafana -----'
 pgrep -f grafana | xargs kill
 echo '----- 停止 pushgateway -----'
 pgrep -f pushgateway | xargs kill
 echo '----- 停止 prometheus -----'
 pgrep -f prometheus | xargs kill
};;
esac

spark监控

可参考:Prometheus + Grafana(十二)系统监控之Spark - 曹伟雄 - 博客园 (cnblogs.com)

主要是安装graphite_exporter和修改sparkmetrics.properties文件

# Enable JvmSource for instance master, worker, driver and executor
master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
 
*.sink.graphite.class=org.apache.spark.metrics.sink.GraphiteSink
*.sink.graphite.protocol=tcp
*.sink.graphite.host=172.16.10.91    # 部署graphite_exporter服务地址
*.sink.graphite.port=9109            # graphite_exporter服务默认端口9109
*.sink.graphite.period=60
*.sink.graphite.unit=seconds

flink监控

主要修改flink的conf目录下的flink-conf.yaml文件

##### 与 Prometheus 集成配置 #####
metrics.reporter.promgateway.class: 
org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
# PushGateway 的主机名与端口号
metrics.reporter.promgateway.host: hadoop202
metrics.reporter.promgateway.port: 9091
# Flink metric 在前端展示的标签(前缀)与随机后缀
metrics.reporter.promgateway.jobName: flink-metrics-pp
metrics.reporter.promgateway.randomJobNameSuffix: true
metrics.reporter.promgateway.deleteOnShutdown: false
metrics.reporter.promgateway.interval: 30 SECONDS

睿象云告警通知

官方地址:睿象云-AIOps智能运维平台 | 用人工智能点亮传统IT运维

具体需要在配置流程,请参考【尚硅谷】Prometheus+Grafana+睿象云的监控告警系统_哔哩哔哩_bilibili

所以,整体的流程就是任务启动,将相关指标推送到网关,由Prometheus进行拉取,用grafana进行可视化展示,并且搭配睿象云进行告警及时通知

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友培

数据皆开源!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值