容器服务 可观测性集成

如何配置 Nginx Ingress 来集成监控和日志系统以提升可观测性,包括与腾讯云上托管的 Prometheus、Grafana 和 CLS 这些产品的集成;也包括与自建的 Prometheus 和 Grafana 的集成。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

注意:ingress-nginx 是一个由社区维护的开源项目。这篇内容仅供参考,不提供支持。如在使用过程中遇到问题,建议查阅 ingress-nginx 社区 的最新产品文档以获取帮助。

一、集成 Prometheus 监控

如果你使用了 腾讯云 Prometheus 监控服务关联 TKE 集群,或者是安装了 Prometheus Operator 来监控集群,都可以启用 ServiceMonitor 来采集 Nginx Ingress 的监控数据,values.yaml 配置方法:

commonLabels: prom_id: prom-xxx # 通过这个 label 指定 Prometheus 实例的 ID,以便被 Prometheus 实例识别到 ServiceMonitorcontroller: metrics: enabled: true # 专门创建一个 service 给 Prometheus 用作 Nginx Ingress 的服务发现 serviceMonitor: enabled: true # 下发 ServiceMonitor 自定义资源,启用监控采集规则

二、集成 Grafana 监控面板

如果你使用了 腾讯云 Prometheus 监控服务关联 TKE 集群 且关联了 腾讯云 Grafana 服务,可以直接在 Prometheus 集成中心安装 Nginx Ingress 的监控面板:

如果是自建的 Grafana,直接将 Nginx Ingress 提供的 Grafana Dashboards 中两个监控面板(JSON 文件)导入 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 日志采集规则(根据实际情况二选一):

·采集标准输出:

apiVersion: cls.cloud.tencent.com/v1kind: LogConfigmetadata: name: ingress-nginx-controller # 日志采集规则名称,如果是多个 nginx ingress 实例,这里不能冲突spec: clsDetail: topicId: "********-****-****-****-************" # 替换日志主题的 ID 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 – 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 – host inputDetail: type: container_stdout containerStdout: namespace: ingress-nginx # nginx ingress 所在命名空间 workload: kind: deployment name: ingress-nginx-controller # 选中 nginx ingress controller 的 deployment 名称

·采集日志文件:

apiVersion: cls.cloud.tencent.com/v1kind: LogConfigmetadata: name: ingress-nginx-controller # 日志采集规则名称,如果是多个 nginx ingress 实例,这里不能冲突spec: clsDetail: topicId: "********-****-****-****-************" # 替换日志主题的 ID 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 – 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 – host inputDetail: type: container_file containerFile: namespace: ingress-nginx # nginx ingress 所在命名空间 workload: kind: deployment name: ingress-nginx-controller # 选中 nginx ingress controller 的 deployment 名称 container: controller logPath: /var/log/nginx filePattern: nginx_access.log

6. 测试 Ingress 请求,产生日志数据。

7. 进入日志服务控制台的 检索分析 页面,选择 Nginx Ingress 所使用的日志主题,确认日志能够被正常检索。

8. 如果一切正常,可以使用日志服务的 Nginx 访问大盘 和 Nginx 监控大盘 两个预置仪表盘并选择 Nginx Ingress 所使用的日志主题来展示 Nginx 访问日志的分析面板:

·Nginx 访问大盘

·Nginx 监控大盘 

9. 在日志服务的 Nginx 访问大盘 和 Nginx 监控大盘 可以直接通过面板来设置监控告警规则,详情请参见 监控告警概述。 

赞 (0)
上一篇 4天前
下一篇 4天前