引言
监控不仅仅是一个任务,它是系统管理的核心部分。通过监控,您可以了解系统的性能,及时发现问题,并优化资源使用。本文将详细介绍如何使用 Docker Compose 设置一个健壮的 Prometheus、Grafana 和 node_exporter 监控堆栈。除了“如何”设置之外,我们还将解释每个设置背后的“为什么”。
项目结构
项目以特定的目录结构进行组织,以提高可读性和可维护性:
.
├── docker-compose.yml
├── grafana-provisioning
│ ├── dashboards
│ │ ├── dashboards.yaml
│ │ └── my_dashboard.json
│ └── datasources
│ └── datasources.yaml
└── prometheus.yml
Docker Compose 配置 (docker-compose.yml
)
以下是 Docker Compose 的配置:
# docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus:latest
command:
- --storage.tsdb.retention.time=7d
- --config.file=/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- ./grafana-provisioning/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana-provisioning/datasources:/etc/grafana/provisioning/datasources
node_exporter_1:
image: prom/node-exporter:latest
ports:
- "9100:9100"
node_exporter_2:
image: prom/node-exporter:latest
ports:
- "9101:9100"
为什么是这些设置?
-
Prometheus
image: prom/prometheus:latest
:我们使用最新的镜像,以获取最新的功能和安全补丁。command
:--storage.tsdb.retention.time=7d
:7 天的数据保留策略是一个常见的设置,平衡了存储使用和数据可用性。--config.file=/etc/prometheus/prometheus.yml
:明确告诉 Prometheus 在哪里找到其配置,以确保使用正确的文件。
ports
:暴露 9090 端口以访问 Prometheus 仪表板。volumes
:将我们的自定义 Prometheus 配置映射到容器中。
-
Grafana
image: grafana/grafana:latest
:与 Prometheus 类似,我们希望使用最新的 Grafana 镜像。ports
:暴露 3000 端口以访问 Grafana 仪表板。volumes
:通过挂载这些卷,Grafana 可以自动发现数据源和仪表板。
-
Node Exporter
image: prom/node-exporter:latest
:我们使用最新版本从主机机器收集指标。ports
:这些端口被暴露,以便 Prometheus 可以抓取指标。注意,我们在不同的端口上运行两个实例,以模拟监控多个节点。
Prometheus 配置 (prometheus.yml
)
以下是配置:
# prometheus.yml
scrape_configs:
- job_name: 'node'
scrape_interval: 5s
static_configs:
- targets: ['node_exporter_1:9100', 'node_exporter_2:9100']
为什么是这些设置?
scrape_configs
:这里我们定义要抓取什么。job_name: 'node'
:一个作业收集某种类型的指标;这里选择“node”以便于理解。scrape_interval: 5s
:5 秒的间隔提供了准实时数据,同时不会过度负担系统。static_configs
:我们指定从哪些实例抓取指标。在实际场景中,这可以动态配置。
Grafana 配置
数据源 (datasources.yaml
)
# datasources.yaml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
access: proxy
为什么是这些设置?
name: Prometheus
:将数据源命名为“Prometheus”,使其类型清晰明了。type: prometheus
:这指定了数据源类型,必须设置为“prometheus”以连接到 Prometheus 实例。url: http://prometheus:9090
:这是 Grafana 将找到 Prometheus 的地方。名为“prometheus”的名称由 Docker 内部解析。access: proxy
:Grafana 代理请求,通过不直接暴露数据源来增加一些安全性。
仪表板 (dashboards.yaml
和 my_dashboard.json
)
这里我们指定仪表板提供商和仪表板 JSON 文件。JSON 定义了可视元素、查询和数据源。
为什么是这些设置?
- 这些文件使 Grafana 能够在启动后立即自动生成仪表板,使设置过程自动化和可复制。
运行堆栈
运行以下命令:
docker-compose up
这将启动所有服务,使它们可以在以下位置访问:
- Prometheus:
http://localhost:9090
- Grafana:
http://localhost:3000
结论
我们已经设置了一个使用 Prometheus、Grafana 和 node_exporter 的完全功能的监控堆栈,并通过 Docker Compose 进行管理。我们还深入探讨
了每个配置设置背后的原理,以提供对系统的全面理解。
完整代码可访问 https://github.com/mefengl/example-monitoring。
通过理解“如何”和“为什么”,您将更好地准备去适应这个例子,以满足您自己独特的需求。