在调研监控工具,之前一直用的zabbix很平稳(从没出过问题),监控内容大概有系统级别的cpu、内存、硬盘之类的, 也有服务的运行情况、elasticsearch、hive、kafka的lag等等,但有几个问题没法解决:
1、zabbix没法监控flink(虽然可以通过api调用方式,但flink指标有几百个一个一个加,并且zabbix机制为一个一个指标取的,极其麻烦和低效)
2、jvm级别的es、spring、kafka等运行情况不好获取
3、取kafka数据时,我们有n多topic对应又有n多groupid来消费,如果要取一遍所有信息,zabbix也是只能一个一个取(当然后边发现有模板的方式也可以,但如果增加一个也要手动加)
详细对比可以参考网上文章,说的很详细 http://dockone.io/article/10437
我理了下对于我们这种纯java+大数据场景,并且设备一般都在客户环境不能上网,随时会断电,情况下的优劣势
监控工具 | 优势 | 劣势 |
---|---|---|
zabbix | 稳定、进程少(一个server+agent搞定、文档齐全、所有操作界面都可以配、支持action动作触发(这个很重要) | 对于docker、flink、hive等动态运行的场景支持不好(也可以自定义脚本搞定) |
prometheus | 部署简单、社区插件比较多(各种exporter),比较多的官方直接支持 | 每增加一个组件的监控就需要一个exporter独立进程、预警action等页面不可配(本身页面功能特简陋) |
放个普罗米修斯的架构图
其中:
Prometheus Server: 用数据的采集和存储,PromQL查询,报警配置。
Push gateway: 用于批量,短期的监控数据的汇报总节点。
Exporters: 各种汇报数据的exporter,例如汇报机器数据的node_exporter,汇报MondogDB信息的 MongoDB_exporter 等等。
Alertmanager: 用于高级通知管理。
采集数据的主要流程如下:
1. Prometheus server 定期从静态配置的主机或服务发现的 targets 拉取数据(zookeeper,consul,DNS SRV Lookup等方式)
2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘,也可以远程持久化到云端。
3. Prometheus通过PromQL、API、Console和其他可视化组件如Grafana、Promdash展示数据。
4. Prometheus 可以配置rules,然后定时查询数据,当条件触发的时候,会将告警推送到配置的Alertmanager。
5. Alertmanager收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。
开始prometheus安装
他本身是用go写的,所以需要安装个go环境,
安装go:
yum install epel-release
yum install golang
安装普罗米修斯
下载 https://github.com/prometheus/prometheus/releases/tag/v2.26.0
tar zxvf prometheus-2.26.0.linux-amd64.tar.gz && cd prometheus-2.26.0.linux-amd64
./prometheus --config.file=prometheus.yml
安装grafana
vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
开始安装: yum install grafana -y
systemctl start grafana-server
systemctl enable grafana-server
这时候应该能访问grafana页面了: http://ip:3000 用户名密码 admin/admin
然后导入prometheus数据源
安装node_exporter
下载: https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz && cd node_exporter-1.1.2.linux-amd64
./node_exporter # 启动node_exporter,默认是9100端口
修改普罗米修斯配置文件加入node_exporter数据获取
先关掉prometheus进程 ,修改 prometheus.yml ,在后边增加如下配置:
- job_name: 'node_exporter_local'
static_configs:
- targets: ['127.0.0.1:9100']
修改完之后重新执行 ./prometheus --config.file=prometheus.yml
grafana 导入系统监控图
到grafana网站找到最新的一个node exporter图,点进去,可以看到get this dashboard的id,然后导入,数据源选择prometheus就可以看到效果了
https://grafana.com/grafana/dashboards/8919
增加es监控
[https://github.com/justwatchcom/elasticsearch_exporter](https://github.com/justwatchcom/elasticsearch_exporter)
tar zxvf elasticsearch_exporter-1.1.0.linux-amd64.tar.gz
cd elasticsearch_exporter-1.1.0.linux-amd64
# 启动es_exporter 默认监听端口为9114
./elasticsearch_exporter --es.uri="https://用户名:密码@10.0.81.101:9200" --es.ssl-skip-verify
再修改prometheus.yml 增加如下配置:
- job_name: 'es监控'
static_configs:
- targets: ['127.0.0.1:9114']
重新执行: ./prometheus --config.file=prometheus.yml
在grafana中导入elasticsearch监控模板: https://github.com/justwatchcom/elasticsearch_exporter/blob/master/examples/grafana/dashboard.json
导入选择json格式即可
增加kafka监控
下载: [https://github.com/danielqsj/kafka_exporter/releases](https://github.com/danielqsj/kafka_exporter/releases)
tar zxvf kafka_exporter-1.3.0.tar.gz
cd kafka_exporter-1.3.0
#作者最新版忘了把编译后的文件放进去,所以需要先执行编译
go build # 生成一个kafka_exporter的可执行文件
./kafka_exporter --tls.enabled --tls.ca-file="/etc/ca-cert" --tls.cert-file="/etc/kafka.client.pem" --tls.key-file="/etc/kafka.client.key" --tls.insecure-skip-tls-verify --kafka.server=10.0.81.22:9091 --log.level="debug"
修改 prometheus.yml 增加以下内容,还是一样 重新执行: ./prometheus --config.file=prometheus.yml
- job_name: 'kafka监控'
static_configs:
- targets: ['127.0.0.1:9308']
grafana导入kafka模板: id为7589
监控flink
我这里用的是flink1.12.0 安装在/opt/目录下
flink在发布时自带了prometheus的jar包,先复制prometheus的jar包到flink的lib目录下 cp /opt/flink-1.12.0/plugins/metrics-prometheus/flink-metrics-prometheus-1.12.0.jar /opt/flink-1.12.0/lib/
修改配置增加监控数据:/opt/flink-1.12.0/conf/flink-conf.yaml
metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
metrics.reporter.promgateway.host: 127.0.0.1
metrics.reporter.promgateway.port: 9091
metrics.reporter.promgateway.jobName: myJob
metrics.reporter.promgateway.randomJobNameSuffix: true
metrics.reporter.promgateway.deleteOnShutdown: false
修改完成之后重启flink,确保任务都正常运行
修改 prometheus.yml 增加以下内容,还是一样 重新执行: ./prometheus --config.file=prometheus.yml
- job_name: 'flink监控'
static_configs:
- targets: ['127.0.0.1:9091']
grafana导入模板: https://grafana.com/grafana/dashboards?search=flink
安装pushgateway: https://github.com/prometheus/pushgateway/releases/tag/v1.4.0
wget https://github.com/prometheus/pushgateway/releases/download/v1.4.0/pushgateway-1.4.0.linux-amd64.tar.gz
tar zxvf pushgateway-1.4.0.linux-amd64.tar.gz
cd pushgateway-1.4.0.linux-amd64
./pushgateway