极客时间运维进阶训练营第七周作业
1.了解 prometheus 各组件的功能,熟悉 prometheus 的数据采集流程
Prometheus 主要用于监控,通过 pull 的方式收集数据。核心是 Prometheus server,处理数据。
架构图如图所示,英文介绍如下:
the main Prometheus server which scrapes and stores time series data
client libraries for instrumenting application code
a push gateway for supporting short-lived jobs
special-purpose exporters for services like HAProxy, StatsD, Graphite, etc.
an alertmanager to handle alerts
various support tools
总结:
Server: 接收外部 http 请求,收集、存储、查询指标数据。里面有 TSDB,是时序数据库,各节点要同步时间。
Targets: 静态目标,执行指标数据抓取。
service discovery: 动态服务发现,执行指标数据抓取。
alerting:告警用。
push gateway:数据收集代理服务器。临时数据放到这里,Prometheus 会来 pull 数据。
data visualization and export: 数据可视化与数据导出。一般用 grafana 实现,虽然 Prometheus 本身也有 web UI,但是画的图不如 grafana 好看。
CNCF 的景观图,目前有很多工具可以使用:https://landscape.cncf.io/images/landscape.pdf
优点是:
key-value 格式。可以添加额外的 label,用于筛选。zabbix 基于普通的 json。
不需要 mysql,本身带了 TSDB。对监控数据而言,是按时间排列的,性能更好。
支持第三方 dashboard,比如 grafana。
可以本地保存,也可以远端保存。
支持服务自动化发现。目标可以是 redis,kafaka,container,通过 k8s 的 API 来自动发现。
强大的数据查询语句 promQL。数据可以算术运算。
每个采样点就 3.5bytes,可以处理数百万级别的 metrics 指标数据。
支持第三方 exporter。
类似的工具还有 zabbix,基于 LAMP(linux, apache, mysql, php),以前用的多。
2.基于 docker 或二进制部署 prometheus server
安装代码见 GitHub
https://github.com/jianywu/cloud_learn/blob/main/prometheus/prometheus/onekey-install.sh
docker 部署:
https://gitee.com/jiege-gitee/prometheus-docker-compose
二进制部署:
部署好,ip:9100/metrics 就可以看到数据了。
3.基于 docker 或二进制部署 node-exporter,并通过 prometheus 收集 node-exporter 指标数据
安装代码见 GitHub
https://github.com/jianywu/cloud_learn/blob/main/prometheus/node_exporter/node_exporter_install.sh
docker 方式部署:
docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" quay.io/prometheus/node-exporter --path.rootfs /host
二进制方式部署:
这里 scrape_interval 写为 5s,和 global 的配置不同,就按这个独立的配置来实现。
prometheus.yml 里的 targets 加上端口即可。node-exporter 的端口是 9100。多台机器都用引号引起来,中间用逗号隔开。
点击 Prometheus 菜单 Status 的 Targets,就可以看到当前配置的 target 了,包括当前的 Prometheus,以及 node-exporter,还有 pushgateway。
4.安装 grafana 并添加 prometheus 数据源,导入模板可以图形显示指标数据
安装 grafana
https://github.com/jianywu/cloud_learn/blob/main/prometheus/grafana/onekey-install.sh
配置 Prometheus 数据源
Configuration-->data source-->add datasource-->prometheus
配置 Prometheus 的 IP 和端口,然后点 Save & exit。
显示“Data source is working”表示工作正常。
导入模板看数据
Dashboards-->import-->模板 id 11074/8919
导入后,就可以看到数据了。
5.掌握 prometheus 的 promQL 语句的简单使用
有四种类型,Range Vector/Instance Vector 较常用。
点菜单 Graph,就会出现 PromQL 的界面,Execute 就会执行表达式。
点 Execute 前的地球图标,可以看到支持哪些字段。
按 tab 键可以自动补全。
排序可以使用 sort(node_network_receive_bytes_total)/1024/1024/1024 排序,看哪个网卡收法包最多。
count(node_os_version)可以知道 Prometheus 监控的有几个 node。
比如这里有 3 个 node。
6.部署 prometheus 联邦集群并实现指标数据收集
代码见链接:https://github.com/jianywu/cloud_learn/tree/main/prometheus/federal。
federal 的配置:
连接了 2 个 Prometheus server。
idc1 的配置:
idc2 的配置:
Grafana 查看 Prometheus 的数据:
扩展 1.基于 pushgateway 实现指标数据收集
安装脚本见 GitHub
pushgateway 主要用于自定义监控。流程是 App 把数据发到 pushgateway。把 pushgateway 加到 Prometheus 后,Prometheus 会来拉取数据。
安装 pushgateway,确认 ss -tnlp,看到 9091 端口开放,就说明 pushgateway 起来了。
把 pushgateway 关联到 Prometheus
增加配置到 Prometheus,然后 reload Prometheus。
curl -X POST http://124.223.157.166:9090/-/reload
推送数据到 pushgateway
echo "mytest_metric 2088" | curl --data-binary @- http://124.223.157.166:9091/metrics/job/mytest_job
push 后,可以看到 key 是 mytest_job,value 是 2088。
评论