在调研监控工具,以前一直用的zabbix很平稳(从没出过问题),监控内容大概有系统级别的cpu、内存、硬盘之类的, 也有服务的运行状况、elasticsearch、hive、kafka的lag等等,但有几个问题无法解决:java
一、zabbix无法监控flink(虽然能够经过api调用方式,但flink指标有几百个一个一个加,而且zabbix机制为一个一个指标取的,极其麻烦和低效) 二、jvm级别的es、spring、kafka等运行状况很差获取 三、取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收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。
他自己是用go写的,因此须要安装个go环境,node
yum install epel-releaselinux
yum install golanggit
下载 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
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数据源
下载: 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数据获取github
先关掉prometheus进程 ,修改 prometheus.yml ,在后边增长以下配置: - job_name: 'node_exporter_local' static_configs: - targets: ['127.0.0.1:9100'] 修改完以后从新执行 ./prometheus --config.file=prometheus.yml
到grafana网站找到最新的一个node exporter图,点进去,能够看到get this dashboard的id,而后导入,数据源选择prometheus就能够看到效果了golang
https://grafana.com/grafana/dashboards/8919spring
[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.jsondocker
导入选择json格式便可apache
下载: [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
我这里用的是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