prometheus监控篇-----------------------------------------(一)
Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发者和用户社区。它现在是一个独立的开放源码项目,并且独立于任何公司,为了强调该点并澄清项目的治理结构,Prometheus在2016年加入了云计算基金会,成为继Kubernetes之后的第二个托管项目。 Prometheus是用来收集数据的,同时本身也提供强大的查询能力,结合Grafana即可以监控并展示出想要的数据。
Prometheus的主要特征
- 多维度数据模型
- 灵活的查询语言 (PromQL)
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过pull模型拉去时间序列数据
- 也通过中间网关支持push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示,grafana也支持它
Prometheus组件
Prometheus生态包括了很多组件,它们中的一些是可选的:
- 主服务Prometheus Server负责抓取和存储时间序列数据
- 客户库负责检测应用程序代码
- 支持短生命周期的PUSH网关
- 基于Rails/SQL仪表盘构建器的GUI
- 多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式
- 警告管理器 (AlertManaager)
- 命令行查询工具
- 其他各种支撑工具
Prometheus监控Kubernetes集群过程中,通常情况为:
- 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等
- 使用prometheus-operator部署prometheus,存储监控数据
- 使用kube-state-metrics收集k8s集群内资源对象数据
- 使用node_exporter收集集群中各节点的数据
- 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
- 使用alertmanager实现监控报警
- 使用grafana实现数据可视化
prometheus架构及组件特点
Prometheus 直接接收或者通过中间的 Pushgateway 网关被动获取指标数据,在本地存储所有的获取的指标数据,并对这些数据进行一些规则整理,用来生成一些聚合数据或者报警信息,Grafana 或者其他工具用来可视化这些数据。
Prometheus服务可以直接通过目标拉取数据,或者间接地通过中间网关拉取数据。它在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中,PromQL和其他API可视化展示收集的数据在K8s中,关于集群的资源有metrics度量值的概念,有各种不同的exporter可以通过api接口对外提供各种度量值的及时数据,prometheus在与k8s融合工作的过程中就是通过与这些提供metric值的exporter进行交互,获取数据,整合数据,展示数据,触发告警的过程。
1)Prometheus获取metrics
- 对短暂生命周期的任务,采取拉的形式获取metrics (不常见)
- 对于exporter提供的metrics,采取拉的方式获取metrics(通常方式),对接的exporter常见的有:kube-apiserver 、cadvisor、node-exporter,也可根据应用类型部署相应的exporter,获取该应用的状态信息,目前支持的应用有:nginx/haproxy/mysql/redis/memcache等。
2)Prometheus适用场景
Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
prometheus+grafana ##源码的部署
部署prometheus监控端
mkdir /opt/monitor/
[root@zabbix ~]# tar -xf prometheus-2.25.0.linux-amd64.tar.gz -C /opt/monitor/
[root@zabbix ~]# mv prometheus-2.25.0.linux-amd64.tar.gz /opt/monitor/prometheus
[root@zabbix ~]# cd /opt/monitor/prometheus-2.25.0.linux-amd64/
[root@zabbix prometheus-2.25.0.linux-amd64]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
[root@zabbix monitor]# mv prometheus-2.25.0.linux-amd64/ prometheus/
[root@zabbix monitor]# cd /usr/lib/systemd/system/
[root@zabbix monitor]# cat prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@zabbix system]#systemctl restart prometheus
[root@zabbix system]# ps -ef | grep prometheus
root 75418 1 0 08:45 ? 00:00:00 /opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml
root 78206 66919 0 08:49 pts/2 00:00:00 grep --color=auto prometheus
[root@zabbix system]# ss -anptu | grep prometheus
tcp LISTEN 0 128 :::9090 ::😗 users:((“prometheus”,pid=75418,fd=8))
tcp ESTAB 0 0 ::1:42484 ::1:9090 users:((“prometheus”,pid=75418,fd=3))
tcp ESTAB 0 0 ::1:9090 ::1:42484 users:((“prometheus”,pid=75418,fd=7))
访问 ip:9090
部署grafana可视化页面
[root@zabbix ~]# tar -xf grafana-7.4.5.linux-amd64.tar.gz -C /opt/monitor/
[root@zabbix ~]# cd /opt/monitor/
[root@zabbix monitor]# mv grafana-7.4.5/ grafana/
[root@zabbix system]# cd /usr/lib/systemd/system
[root@zabbix system]# cat grafana.service
[Unit]
Description=grafana
[Service]
ExecStart=/opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@zabbix ~]# systemctl restart grafana
[root@zabbix ~]# ps -ef | grep grafana
root 82018 1 6 08:55 ? 00:00:00 /opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana
root 82165 66919 0 08:55 pts/2 00:00:00 grep --color=auto grafana
[root@zabbix ~]# ss -anptu | grep grafana
tcp ESTAB 0 31 192.168.0.60:50536 185.199.109.133:443 users:((“grafana-server”,pid=82018,fd=10))
tcp ESTAB 0 0 192.168.0.60:52324 34.120.177.193:443 users:((“grafana-server”,pid=82018,fd=9))
tcp LISTEN 0 128 :::3000 ::😗 users:((“grafana-server”,pid=82018,fd=8))
访问: ip:3000
源码包的资源
https://prometheus.io/download/
https://www.programmableweb.com/api/grafana