prometheus+ Grafana监控全家桶

在调研监控工具,以前一直用的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收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。

prometheus+ Grafana监控全家桶

开始prometheus安装

他自己是用go写的,因此须要安装个go环境,node

安装go:

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

安装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数据源

prometheus+ Grafana监控全家桶

安装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数据获取github

先关掉prometheus进程 ,修改 prometheus.yml ,在后边增长以下配置:

- job_name: 'node_exporter_local'
    static_configs:
    - targets: ['127.0.0.1:9100']

修改完以后从新执行 ./prometheus --config.file=prometheus.yml

prometheus+ Grafana监控全家桶

grafana 导入系统监控图

prometheus+ Grafana监控全家桶

到grafana网站找到最新的一个node exporter图,点进去,能够看到get this dashboard的id,而后导入,数据源选择prometheus就能够看到效果了golang

https://grafana.com/grafana/dashboards/8919spring

prometheus+ Grafana监控全家桶

增长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

prometheus+ Grafana监控全家桶

在grafana中导入elasticsearch监控模板: https://github.com/justwatchcom/elasticsearch_exporter/blob/master/examples/grafana/dashboard.jsondocker

导入选择json格式便可apache

prometheus+ Grafana监控全家桶

增长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

prometheus+ Grafana监控全家桶

监控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

prometheus+ Grafana监控全家桶

prometheus+ Grafana监控全家桶

相关文章
相关标签/搜索