🐇明明跟你说过:个人主页
🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅
🔖行路有良友,便是天堂🔖
目录
四、 Prometheus与Docker的集成
1、安装与配置Prometheus
2、配置cAdvisor作为数据源
3、数据抓取与存储配置
五、监控实践
1、监控指标选择
2、告警规则设置
六、监控技术的发展趋势
四、 Prometheus与Docker的集成
1、安装与配置Prometheus
环境:
IP | 主机名 | 安装组件 |
192.168.40.158 | test | Docker、Prometheus、cAdvisor |
可以从Prometheus的官方GitHub仓库下载预编译的二进制文件,或者直接使用包管理器(如apt、yum等)进行安装。这里以直接从官网下载为例。
访问Prometheus官网Download | Prometheus,下载安装包,
执行以下命令,解压tar包
[root@test ~]# tar zxvf prometheus-2.50.1.linux-amd64.tar.gz
进入到解压后的目录下
[root@test ~]# cd prometheus-2.50.1.linux-amd64
- console_libraries/: 这个目录包含用于构建Prometheus控制台的库文件。
- consoles/: 这个目录包含Prometheus控制台的前端文件。
- LICENSE: 这是Prometheus的许可证文件,包含了使用和分发该软件的条款。
- NOTICE: 这个文件包含了有关Prometheus软件的通知和版权信息。
- prometheus: 这是Prometheus服务器的可执行文件。
- prometheus.yml: 这是Prometheus的主要配置文件,用于定义监控目标、规则和服务发现等配置。
- promtool: 这是Prometheus工具的可执行文件,用于管理和验证Prometheus的配置文件和规则。
编辑配置文件
[root@test prometheus-2.50.1.linux-amd64]# vim prometheus.yml
在末尾添加如下内容
- job_name: 'docker'
static_configs:
- targets: ['localhost:8080'] # 假设cAdvisor在本地主机的8080端口上运行
全局配置:
- scrape_interval: 将抓取间隔设置为每15秒,默认为每1分钟。
- evaluation_interval: 每隔15秒评估规则一次,默认为每1分钟。
- scrape_timeout: 抓取超时设置为全局默认值(10秒)。
告警管理器配置:
- alertmanagers: 配置Alertmanager的地址和端口,这里使用静态配置方式。
规则文件加载配置:
- rule_files: 加载规则文件列表,在此示例中所有规则文件都被注释掉了。
抓取配置:
- scrape_configs: 配置要抓取的目标。这里定义了两个作业(job):
- 第一个作业名为"prometheus",抓取目标为Prometheus自身(localhost:9090)。
- 第二个作业名为"docker",抓取目标是假设cAdvisor在本地主机的8080端口上运行(localhost:8080)。
2、配置cAdvisor作为数据源
cAdvisor是一个开源的容器资源监控和性能分析工具,它可以为容器(包括Docker容器)提供详细的资源使用情况和性能数据。我们可以直接运行cAdvisor作为一个Docker容器来获取这些数据。
这里我们以Docker启动cAdvisor,如果还未安装Docker,请参考《在CentOS系统中轻松安装和配置Docker指南》这篇文章
执行如下命令,启动cAdvisor容器
[root@test prometheus-2.50.1.linux-amd64]# docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
3、数据抓取与存储配置
Prometheus会按照配置文件中指定的scrape_interval
定期抓取目标的数据。抓取到的数据会被存储在本地的TSDB(时间序列数据库)中。可以通过调整storage.tsdb
配置来修改存储设置,例如数据保留时间等。
以下配置将设置数据保留时间为15天:
storage:
tsdb:
retention.time: 15d
启动Prometheus
[root@test prometheus-2.50.1.linux-amd64]# ./prometheus --config.file=prometheus.yml
Prometheus现在将开始从cAdvisor抓取数据,并将数据存储在其本地的TSDB中。我们可以通过Prometheus的Web UI(默认在9090端口上)来查看和查询这些数据。
五、监控实践
1、监控指标选择
CPU使用情况
sum(rate(process_cpu_seconds_total{job="your_job_name"}[5m]))
这个查询语句会计算过去5分钟内所有作业(job)的 CPU 使用率总和。你需要将your_job_name替换为你要监视的作业名称。
内存消耗
container_memory_usage_bytes / 1024 / 1024
container_memory_usage_bytes是Prometheus中的一个指标,用于表示容器的内存使用量,单位为字节。我们可以使用该指标来监控容器的内存消耗情况。
磁盘I/O与网络I/O
在Prometheus中,可以使用以下指标来监控磁盘I/O和网络I/O:
磁盘I/O:
- node_disk_read_bytes_total: 读取的磁盘字节数。
- node_disk_written_bytes_total: 写入的磁盘字节数。
- node_disk_read_time_seconds_total: 磁盘读取操作的时间。
- node_disk_write_time_seconds_total: 磁盘写入操作的时间。
网络I/O:
- node_network_receive_bytes_total: 接收的网络字节数。
- node_network_transmit_bytes_total: 发送的网络字节数。
- node_network_receive_packets_total: 接收的网络数据包数。
- node_network_transmit_packets_total: 发送的网络数据包数。
不过,这些指标需要有 node_exporter 才能采集到,安装也比较简单,读者可以尝试下,这里不再过多叙述
※这里的指标查询,我们只使用了Prometheus的PQL语言进行查询,而在实际中,通常会搭配Grafana的仪表板来进行监控数据的展示,在后续的文章中,会更新这一部分的内容。
2、告警规则设置
在Prometheus中配置告警规则需要编辑Prometheus的配置文件(通常是prometheus.yml文件),并在其中定义告警规则
例如:
groups:
- name: example
rules:
- alert: HighMemoryUsage
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "{{ $labels.instance }} memory usage is above 90%"
- groups:这是告警规则的组定义。在一个组内可以定义多个告警规则。
- name:这个组的名称,这里命名为"example"。
- rules:这是组内的规则列表,每个规则定义了一个具体的告警条件和设置。
- alert:规则的名称,用于标识此规则。在这里,规则名为"HighMemoryUsage"。
- expr:这是一个PromQL表达式,用于定义触发警报的条件。在这个示例中,它计算可用内存占总内存的百分比,如果超过90%,则触发警报。
- for:这是警报持续时间,表示当触发条件持续了多长时间后触发警报。在这里,如果条件持续了5分钟,则触发警报。
- labels:这是用于标记警报的附加标签。在这个示例中,我们为警报设置了一个"severity"标签,值为"warning"。
- annotations:这是用于描述警报的附加注释。在这个示例中,我们为警报设置了一个简要的摘要和描述。
这个告警规则的作用是当可用内存占总内存的百分比超过90%并持续5分钟时触发警报,并且警报的严重性为警告级别,提供了摘要和描述信息以便用户理解警报的原因和影响。
六、监控技术的发展趋势
-
自动化和自动化运维:随着云原生技术的普及和自动化运维的需求增加,监控技术也在朝着更加自动化的方向发展。自动化能够提高效率、降低成本,并减少人为错误。
-
云原生监控:随着容器化、微服务架构和Serverless等云原生技术的流行,监控技术也在适应云原生环境的需求。云原生监控工具提供了更好的可扩展性、灵活性和适应性,能够更好地监控分布式系统。
-
多维度监控:传统的指标监控已经不能满足复杂系统的监控需求,因此多维度监控变得越来越重要。除了常见的系统资源监控指标外,还需要监控应用程序的性能指标、用户体验指标等。
-
人工智能和机器学习:人工智能和机器学习技术在监控领域的应用越来越广泛。通过利用机器学习算法分析监控数据,可以实现异常检测、自动故障诊断、预测性维护等功能,帮助企业提高系统的稳定性和可靠性。
-
开源监控工具的发展:开源监控工具在监控领域的地位越来越重要,例如Prometheus、Grafana等。这些工具具有开放的生态系统、丰富的社区支持和灵活的功能,被越来越多的企业和组织所采用。
-
容器化监控:随着容器技术的普及,容器化监控也变得越来越重要。容器化监控工具可以监控容器的运行状态、资源利用率、性能指标等,帮助企业实现对容器化环境的全面管理和监控。
-
安全监控:随着网络安全威胁的增加,安全监控也变得越来越重要。安全监控工具可以实时监测网络流量、异常行为、安全事件等,及时发现和应对安全威胁。
总体而言,监控技术的发展趋势是向着更加智能化、自动化、多维度、实时化和安全化方向发展,以满足不断变化的业务需求和复杂的系统环境。
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!