概述
本文介绍如何配置 Nginx Ingress 来集成监控和日志系统以提升可观测性,包括与腾讯云上托管的 Prometheus、Grafana 和 CLS 这些产品的集成;也包括与自建的 Prometheus 和 Grafana 的集成。
集成 Prometheus 监控
controller:
metrics:
enabled: true
serviceMonitor:
enabled: true
集成 Grafana 监控面板
集成 CLS 日志服务
以下内容将指导您如何将 Nginx Ingress Controller 的 access log 采集到 CLS,并结合 CLS 的仪表盘分析日志。
1. 在 values.yaml
中配置 nginx 访问日志的格式,同时设置时区以便时间戳能展示当地时间(增强可读性):
controller:
config:
log-format-upstream:
$remote_addr - $remote_user [$time_local] "$request"
$status $body_bytes_sent "$http_referer" "$http_user_agent"
$request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr
$upstream_response_length $upstream_response_time $upstream_status $req_id $host
extraEnvs:
- name: TZ
value: Asia/Shanghai
2. 确保集群启用了日志采集功能。
3. 为 Nginx Ingress Controller 准备好 CLS 日志集和日志主题,如果没有,请前往 CLS 控制台 根据自己的需求来创建,并记录日志主题的 ID。 4. 为日志主题开启索引:
启用索引,全文分词符为 @&?|#()='",;:<>[]{}/ \\n\\t\\r\\\\
:
批量添加索引字段 (需与下图中配置保持一致):
5. 创建 TKE 日志采集规则(根据实际情况二选一):
注意:
必须替换的配置项是 topicId
,即日志主题 ID,表示采集的日志将会发送到该 CLS 日志主题里。
根据自己实际情况选择配置采集标准输出还是日志文件,nginx ingress 默认是将日志输出到标准输出,您也可以选择将日志落盘到日志文件,详情请参见 日志轮转。 采集标准输出:
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: ingress-nginx-controller
spec:
clsDetail:
topicId: "********-****-****-****-************"
logType: fullregex_log
extractRule:
beginningRegex: (\\S+)\\s-\\s(\\S+)\\s\\[([^\\]]+)\\]\\s\\"(\\w+)\\s(\\S+)\\s([^\\"]+)\\"\\s(\\S+)\\s(\\S+)\\s\\"([^\\"]*)\\"\\s\\"([^\\"]*)\\"\\s(\\S+)\\s(\\S+)\\s\\[([^\\]]*)\\]\\s\\[([^\\]]*)\\]\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)
logRegex: (\\S+)\\s-\\s(\\S+)\\s\\[([^\\]]+)\\]\\s\\"(\\w+)\\s(\\S+)\\s([^\\"]+)\\"\\s(\\S+)\\s(\\S+)\\s\\"([^\\"]*)\\"\\s\\"([^\\"]*)\\"\\s(\\S+)\\s(\\S+)\\s\\[([^\\]]*)\\]\\s\\[([^\\]]*)\\]\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)
keys:
- remote_addr
- remote_user
- time_local
- timestamp
- method
- url
- version
- status
- body_bytes_sent
- http_referer
- http_user_agent
- request_length
- request_time
- proxy_upstream_name
- proxy_alternative_upstream_name
- upstream_addr
- upstream_response_length
- upstream_response_time
- upstream_status
- req_id
- sys_address
inputDetail:
type: container_stdout
containerStdout:
namespace: ingress-nginx
workload:
kind: deployment
name: ingress-nginx-controller
采集日志文件:
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: ingress-nginx-controller
spec:
clsDetail:
topicId: "********-****-****-****-************"
logType: fullregex_log
extractRule:
beginningRegex: (\\S+)\\s-\\s(\\S+)\\s\\[([^\\]]+)\\]\\s\\"(\\w+)\\s(\\S+)\\s([^\\"]+)\\"\\s(\\S+)\\s(\\S+)\\s\\"([^\\"]*)\\"\\s\\"([^\\"]*)\\"\\s(\\S+)\\s(\\S+)\\s\\[([^\\]]*)\\]\\s\\[([^\\]]*)\\]\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)
logRegex: (\\S+)\\s-\\s(\\S+)\\s\\[([^\\]]+)\\]\\s\\"(\\w+)\\s(\\S+)\\s([^\\"]+)\\"\\s(\\S+)\\s(\\S+)\\s\\"([^\\"]*)\\"\\s\\"([^\\"]*)\\"\\s(\\S+)\\s(\\S+)\\s\\[([^\\]]*)\\]\\s\\[([^\\]]*)\\]\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)
keys:
- remote_addr
- remote_user
- time_local
- timestamp
- method
- url
- version
- status
- body_bytes_sent
- http_referer
- http_user_agent
- request_length
- request_time
- proxy_upstream_name
- proxy_alternative_upstream_name
- upstream_addr
- upstream_response_length
- upstream_response_time
- upstream_status
- req_id
- sys_address
inputDetail:
type: container_file
containerFile:
namespace: ingress-nginx
workload:
kind: deployment
name: ingress-nginx-controller
container: controller
logPath: /var/log/nginx
filePattern: nginx_access.log
6. 测试 Ingress 请求,产生日志数据。
7. 进入日志服务控制台的 检索分析 页面,选择 nginx ingress 所使用的日志主题,确认日志能够被正常检索。
本页内容是否解决了您的问题?