使用Prometheus和相关工具进行应用监控与日志追踪
立即解锁
发布时间: 2025-08-25 02:10:10 阅读量: 5 订阅数: 7 


Kubernetes for Developers: 实战容器编排与应用部署
### 使用 Prometheus 和 EFK 进行应用程序指标监控与日志管理
#### 1. 使用 Prometheus 查看应用程序指标
Prometheus 是一款强大的监控工具,它可以动态更新监控目标。在使用 Helm 部署 Prometheus 时,其配置信息嵌入在 `values.yaml` 文件中。可以在其中查找 `kubernetes-service-endpoints` 作业,获取相关配置和使用文档。若本地没有该文件,可访问 [此链接](https://github.com/kubernetes/charts/blob/master/stable/prometheus/values.yaml#L747-L776) 查看。
Prometheus 会查找带有 `prometheus.io/scrape` 注解且值为 `true` 的服务,并自动将其端点添加到监控目标列表中。默认情况下,它会尝试从 `/metrics` 路径获取指标,并使用服务的端口。可以使用其他注解来更改这些默认设置,例如 `prometheus.io/path = "/alternatemetrics"` 会尝试从 `/alternatemetrics` 路径读取指标。
通过使用服务来组织指标收集,Prometheus 可以根据 Pod 数量自动扩展。与其他环境不同,无需每次添加或删除实例时都重新配置监控。
Prometheus 支持多种语言的客户端库,方便收集和公开指标。在深入使用这些库之前,建议阅读 [相关文档](https://prometheus.io/docs/instrumenting/writing_exporters/)。
##### 1.1 Flask 应用与 Prometheus
要在 Python Flask 应用中使用 Prometheus 监控指标,可按以下步骤操作:
1. 安装 `prometheus_client` 库:
```bash
pip install prometheus_client
```
根据环境,可能需要使用 `sudo pip install prometheus_client`。
2. 下载示例代码:
```bash
git clone https://github.com/kubernetes-for-developers/kfd-flask -b 0.5.0
```
3. 在 `exampleapp.py` 中,使用直方图和计数器两种指标,并在请求开始和结束时添加回调来捕获时间差:
```python
from prometheus_client import Histogram, Counter
import time
from flask import Flask, request, make_response
from prometheus_client.exposition import generate_latest
app = Flask(__name__)
FLASK_REQUEST_LATENCY = Histogram('flask_request_latency_seconds', 'Flask Request Latency',
['method', 'endpoint'])
FLASK_REQUEST_COUNT = Counter('flask_request_count', 'Flask Request Count',
['method', 'endpoint', 'http_status'])
@app.before_request
def before_request():
request.start_time = time.time()
@app.after_request
def after_request(response):
request_latency = time.time() - request.start_time
FLASK_REQUEST_LATENCY.labels(request.method, request.path).observe(request_latency)
FLASK_REQUEST_COUNT.labels(request.method, request.path, response.status_code).inc()
return response
@app.route('/metrics')
def metrics():
return make_response(generate_latest())
```
4. 为 `flask-service` 添加注解:
```yaml
kind: Service
apiVersion: v1
metadata:
name: flask-service
annotations:
prometheus.io/scrape: "true"
spec:
type: NodePort
ports:
- port: 5000
selector:
app: flask
```
5. 使用 `kubectl apply -f deploy/` 部署服务。部署后,Prometheus 会将其作为监控目标。使用 `kubectl proxy` 命令,可以通过以下 URL 查看指标:
```
http://localhost:8001/api/v1/proxy/namespaces/default/pods/flask-6596b895b-nqqqz/metrics
```
##### 1.2 Node.js 应用与 Prometheus
在 Node.js 应用中使用 Prometheus 监控指标,步骤如下:
1. 安装 `express-prom-bundle` 库:
```bash
npm install express-prom-bundle --save
```
2. 设置中间件:
```javascript
const express = require('express');
const app = express();
const promBundle = require("express-prom-bundle");
const metricsMiddleware = promBundle({includeMethod: true});
app.use(metricsMiddleware);
```
3. 下载示例代码:
```bash
git clone https://github.com/kubernetes-for-developers/kfd-nodejs -b 0.5.0
```
4. 为 `nodejs-service` 添加注解:
```yaml
kind: Service
apiVersion: v1
metadata:
name: nodejs-service
annotations:
prometheus.io/scrape: "true"
spec:
ports:
- port: 3000
name: web
clusterIP: None
selector:
app: nodejs
```
##### 1.3 Prometheus 中的服务信号
通过三个关键指标可以判断服务的健康和状态:
- **错误率**:使用 `http_request_duration_seconds_count` 指标中的标签来收集错误率。可以使用以下 Prometheus 查询来计算错误率:
```plaintext
sum(increase(http_
```
0
0
复制全文
相关推荐










