文章目录
一、Prometheus是什么
Prometheus 是一个开源的监控和警报工具,它记录任何纯数字时间序列,适用于监控操作系统和硬件指标,例如资源使用率和饱和度,也适用于监控应用程序的响应时间、错误率等。由于其设计简单且易于扩展,它尤其适合于微服务架构的监控。
Prometheus 的主要特点包括:
-
多维数据模型:Prometheus 使用时间序列数据来存储监控信息,每个时间序列都通过指标名和键值对(称为标签)来唯一标识。
-
灵活的查询语言:Prometheus 提供了一种强大的查询语言 PromQL(Prometheus Query Language),允许用户非常灵活地检索和聚合数据。
-
无依赖存储:Prometheus 存储其数据在本地磁盘上,并以高效压缩方式进行存储,不依赖于外部存储系统。
-
服务发现:Prometheus 支持多种服务发现机制,可以动态发现目标服务,并自动监控这些服务。
-
多种模式的数据抓取:Prometheus 主要通过主动拉取(pull)模式获取指标数据,但也支持被动推送(push)模式。
-
支持多种图形和仪表板:虽然 Prometheus 自身带有一个基础的用户界面用于执行 PromQL 查询和查看警报状态,但它通常与 Grafana 这样的可视化工具一起使用,以创建更复杂的仪表板。
-
告警:Prometheus 的 Alertmanager 可以处理告警,支持多种方式通知用户,如邮件、聊天平台等。
二、exporters是什么
Prometheus 的 exporters 是用于从第三方系统中导出监控数据的工具或服务,它们将这些数据转换为 Prometheus 可以理解的格式。因为 Prometheus 主要通过 HTTP 协议拉取(pull)指标数据,exporters 就扮演了数据适配器的角色,让各种不同来源的监控信息能够被 Prometheus 服务器采集和存储。
Exporters 分为两大类:
- 官方 Exporters:由 Prometheus 团队官方提供支持的 exporters,通常用于常见的基础设施组件和服务,如 node_exporter(用于主机级别的指标)、mysqld_exporter(用于 MySQL 数据库的指标)等。
- 社区 Exporters:由社区成员开发和维护的 exporters,覆盖了广泛的应用和服务,比如针对不同数据库、消息队列、HTTP 服务器等的 exporters。
Prometheus 提供了多种官方的和社区贡献的导出器(exporters)和集成,用于收集不同系统和服务的监控数据。以下是一些常用的 Prometheus 导出器:
- node_exporter: 收集节点的资源运行状况
- blackbox_exporter: 用于对网络端点进行探测,支持检查 HTTP、HTTPS、DNS、TCP 和 ICMP。
- mysqld_exporter: 专门用于收集 MySQL 服务器的指标。
- postgres_exporter: 用于收集 PostgreSQL 数据库的性能指标。
- redis_exporter: 收集 Redis 数据库的指标。
- snmp_exporter: 用于通过 SNMP 协议收集网络设备的指标。
- haproxy_exporter: 用于收集 HAProxy 负载均衡器的性能指标。
- kafka_exporter: 用于监控 Apache Kafka 集群的指标。
- grafana_loki: Loki 是 Grafana 提供的日志聚合系统,提供与 Prometheus 兼容的查询接口。
- cdvisor: 用于收集容器化环境中的容器运行时和资源使用情况的指标。
- kube-state-metrics: 用于 Kubernetes 集群,收集有关集群状态的各种对象的指标。
- prometheus-operator: 为 Kubernetes 提供了一种简化 Prometheus 监控集群部署的方法。
- pushgateway: 用于支持短期作业和批处理作业的场景,这些作业无法长时间运行以等待 Prometheus 的拉取操作。
- alertmanager: 虽然不是导出器,但 Alertmanager 是 Prometheus 生态系统中的关键组件,负责处理告警。
三、node_exporter
node_exporter 是 Prometheus 生态系统中的一个组件,它负责收集并暴露被监控主机上的硬件和操作系统级别的指标数据。node_exporter 作为一个独立的服务运行在每台需要被监控的机器上,它通过采集系统信息来提供关于服务器的各种指标,例如 CPU、内存、磁盘和网络使用情况等。
这些指标以 Prometheus 标准的格式暴露出来,通常是 HTTP 接口的形式,允许 Prometheus 服务器定期拉取这些数据。node_exporter 提供了丰富的指标,可以帮助系统管理员和开发人员监控系统资源使用情况,分析性能瓶颈,并在问题发生时及时响应。
四、安装 Prometheus 和 node_exporter
下载
https://prometheus.io/download/#prometheus
https://prometheus.io/download/#node_exporter
根据你的操作系统选择下载,我这里下载windows的prometheus和Linux的node_exporter,两个程序都是解压既可以直接运行
运行 prometheus
解压后,进去目录,双击prometheus.exe
访问:http://localhost:9090/
看到下面的页面:
运行 node_exporter
把 node_exporter-1.7.0.linux-amd64.tar.gz 拉进去linux目录
tar -zxvf node_exporter-1.7.0.linux-amd64.tar.gz
进去解压目录: nohup ./node_exporter &
启动成功后,可以通过节点ip访问地址: http://ip:9100/metrics
可以看到:
五、配置 Prometheus 收集监控数据
进去 promethues 解压目录,修改 promethues.yml 文件:
加入下面的内容
重启 prometheus
访问刚才的 prometheus 页面,选中Graph,输入 key ,可以查询出已经收集的节点监控数据:
当然也支持 PromQL ,例如内存使用率:(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
node_exporter 提供的常见指标类型:
-
CPU: CPU 使用率、用户空间和内核空间的时间、闲置时间、IO 等待时间等。
例如:node_cpu_seconds_total 指标会显示 CPU 花费在不同模式下的时间(用户模式、系统模式等)。
-
内存: 总内存、可用内存、使用中的内存、缓存、交换空间等。
例如:node_memory_MemAvailable_bytes 或 node_memory_MemFree_bytes 指标会显示可用或空闲的内存量。
-
磁盘: 磁盘使用情况、IO 统计、文件系统的大小和使用量等。
例如:node_filesystem_avail_bytes 指标会显示某个文件系统上可用的字节数。
-
网络: 网络接口的数据包发送和接收统计、错误计数、丢包等。
例如:node_network_receive_bytes_total 和 node_network_transmit_bytes_total 指标分别显示接收和发送的总字节数。
-
系统信息: 系统启动时间、登录用户数、系统负载等。
例如:node_boot_time_seconds 指标显示系统最后一次启动的时间戳。
-
进程: 系统中运行的进程数量、进程状态等。
例如:node_procs_running 指标显示当前正在运行的进程数。
-
文件描述符: 文件描述符的使用情况。
例如:node_filefd_allocated 指标显示已分配的文件描述符数量。
总结
欢迎指出我的错误!