前言
Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。
目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
Grafana 是一个仪表盘,而仪表盘必然是用来显示数据的。
Grafana 本身并不负责数据层,它只提供了通用的接口,让底层的数据库可以把数据给它。
而我们起的另一个服务,叫 Prometheus (中文名普罗米修斯数据库)则是负责存储和查询数据的。
也就是说,Grafana 每次要展现一个仪表盘的时候,会向 Prometheus 发送一个查询请求。
那么配置里的另一个服务 Prometheus-exporter
又是什么呢?
这个就是你真正监测的数据来源了,Prometheus-exporter
这个服务,会查询你的本地电脑的信息,比如内存还有多少、CPU 负载之类,然后将数据导出至普罗米修斯数据库。
三者的关系
准备工作
在所有节点上安装 ntpdate
工具,并进行时间同步(因为 Prometheus 对时间要求非常严格)
1 | yum -y install ntpdate |
部署Node-Exporter
在部署Prometheus后,发现图像界面的Target中node状态异常,
因为prometheus无法通过 http://192.168.7.101:9100/metrics 接口取到监控数据。
1 | mkdir /opt/apps |
设置用户和组
1 | groupadd -g 9100 monitor |
修改配置
1 | vi /usr/lib/systemd/system/node_exporter.service |
配置如下
1 | [Unit] |
重启服务
1 | systemctl daemon-reload |
这时候就能够访问
http://192.168.7.101:9100/metrics
部署Prometheus
安装与配置
下载
1 | cd /root |
设置用户和组
1 | groupadd prometheus |
修改配置
1 | vi /opt/apps/prometheus/prometheus.yml |
内容如下
1 | global: |
检查配置文件
1 | /opt/apps/prometheus/promtool check config /opt/apps/prometheus/prometheus.yml |
成功提示
SUCCESS: 0 rule files found
修改服务
1 | vi /usr/lib/systemd/system/prometheus.service |
如下
1 | [Unit] |
启动
1 | systemctl daemon-reload |
访问
启动 promethues 后,可以通过 9090 端口访问web页面
具体的数据:
http://192.168.7.101:9090/metrics
例如输入
1 | node_load1 |
我们就能看到
使用influxdb
默认情况下 Prometheus 会将采集的数据存储到本机的 /opt/apps/prometheus/data
目录,存储数据的大小受限和扩展不便;
所以这里使用 influxdb
作为后端的数据库来存储数据。
安装influxdb
1)安装
1 | wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm |
2)验证
1 | influx |
创建数据库
1 | # 创建库 |
3)配置 Prometheus 集成 infuxdb
1 | vi /opt/apps/prometheus/prometheus.yml |
在最后面添加:
1 | remote_write: |
重启
1 | systemctl restart prometheus |
注意:
如果你们
influxdb
配置密码,请参考 官网文档 来进行配置。
重启后,所有的表就都生成了
1 | use prometheus; |
就可以看到如下
用户操作
打开连接
1 | influx |
创建用户
1 | create user influx with password 'influxdb'; |
创建一个管理员用户,给他所有权限
1 | create user "admin" with password 'influxdb' with all privileges; |
查看用户1
show users
修改密码1
set password for influx = 'influxdb'
删除用户1
drop user admin
Java连接
pom.xml引入相关jar文件,如下:
1 | <!-- 引入influxdb依赖 --> |
influxDB工具类封装:
1 | import java.util.List; |
查询数据
InfluxDB支持一次查询多个SQL,SQL之间用逗号隔开即可。
1 | import org.influxdb.dto.QueryResult; |
插入数据
InfluxDB的字段类型,由第一条插入的值得类型决定;tags的类型只能是String型,可以作为索引,提高检索速度。
1 | public static void main(String[] args) { |
部署Grafana
下载安装
下载
1 | cd /root |
修改配置
1 | cp /opt/apps/grafana/conf/sample.ini /opt/apps/grafana/conf/grafana.ini |
修改内容如下
1 | [paths] |
添加用户
1 | groupadd -g 9100 monitor |
修改服务
1 | vi /usr/lib/systemd/system/grafana.service |
内容如下
1 | [Unit] |
配置生效与重启
1 | systemctl daemon-reload |
结果如下
1 | tcp6 0 0 :::3000 :::* LISTEN 1547/grafana-server |
访问
默认账号密码都是 admin
Docker模式安装
1 | docker run -d -p 3000:3000 --name=grafana -v /data/grafana-storage:/var/lib/grafana grafana/grafana |
模板
https://grafana.com/grafana/dashboards/
使用Docker安装
https://github.com/Kalasearch/grafana-tutorial
与Flink集成
Flink Metric数据流转的流程是
Flink Metric => Pushgateway => Prometheus
配置Flink Metric
复制Jar
1 | cp $FLINK_HOME/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.7.jar $FLINK_HOME/lib |
进入到 Flink 的 conf 目录,修改 flink-conf.yaml
1 | vi $FLINK_HOME/conf/flink-conf.yaml |
添加如下配置
1 | ##### 与 Prometheus 集成配置 ##### |
配置分发
1 | ssh hadoop02 "rm -rf $FLINK_HOME/lib" |
配置Pushgateway
只在Prometheus所在机器上配置
Docker安装
1 | docker pull prom/pushgateway |
普通安装
下载
1 | wget https://github.com/prometheus/pushgateway/releases/download/v1.4.1/pushgateway-1.4.1.linux-amd64.tar.gz |
解压并安装
1 | tar -xvf pushgateway-1.4.1.linux-amd64.tar.gz |
查看版本号验证是否正常
1 | pushgateway --version |
启动服务,默认端口为9091,可通过--web.listen-address
更改监听端口
1 | pushgateway --web.listen-address=0.0.0.0:9091 & |
访问
停止
1 | jobs |
配置Prometheus
1 | vi /opt/apps/prometheus/prometheus.yml |
添加配置
1 | scrape_configs: |
添加后整体配置
1 | global: |
重启Prometheus
启动
1 | systemctl restart prometheus.service |
启动 promethues 后,可以通过 9090 端口访问web页面
具体的数据:
http://192.168.7.101:9090/metrics
测试
监听端口
1 | yum install nc -y |
运行Flink任务
1 | flink run -t yarn-per-job $FLINK_HOME/examples/streaming/SocketWindowWordCount.jar --hostname hadoop01 --port 9999 |
在Prometheus中就能看到
1 | flink_jobmanager_taskSlotsTotal |