阿里云Ingress组件除了提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机外,还支持将所有您的HTTP请求日志记录到标准输出中。您可以在创建集群时启用日志服务,在阿里云日志服务SLS查看Nginx Ingress的访问日志分析报表和监控Nginx Ingress实时状态。本文介绍Nginx Ingress访问日志的部署及查看。
索引
前提条件
安装日志组件。
集群创建时,默认会安装日志组件,如未安装请参见通过日志服务采集Kubernetes容器日志进行手动安装。
升级Log Controller。
通过执行
kubectl edit deployment alibaba-log-controller -n kube-system
命令修改镜像版本进行升级。
开启Nginx Ingress日志采集配置
方式一:通过ACK控制台开启
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,单击网络页签,找到Nginx Ingress Controller组件,然后在组件所在卡片的右下角单击,选择开启日志,最后根据页面提示完成日志开启。
方式二:通过命令行开启
日志采集配置针对ACK进行了CRD扩展,您可以直接部署AliyunLogConfig的CRD配置,Log Controller会自动创建日志服务相关采集配置和报表资源。
部署AliyunLogConfig的CRD时需要注意以下事项:
对于已经正在运行的nginx-ingress-controller, 创建AliyunLogConfig之后,需要重建nginx-ingress-controller Pod,使其采集日志生效。
请确保日志组件alibaba-log-controller版本不低于
0.2.0.0-76648ee-aliyun
。更新版本后,若已经应用了该CRD配置,请删除该配置并重新应用。部署AliyunLogConfig的CRD只针对ACK默认Ingress Controller中的日志格式生效。若您修改过Ingress Controller的访问日志格式,请修改CRD配置中的正则表达式提取
processor_regex
部分。具体操作,请参见通过DaemonSet-CRD方式采集容器日志。IncludeLabel
为Docker inspect中的Label信息。Kubernetes中的命名空间和容器名会映射到Docker的Label中,分别为
io.kubernetes.pod.namespace
和io.kubernetes.container.name
。例如,您创建的Pod所属命名空间为backend-prod,容器名为worker-server。如果配置Label白名单为
io.kubernetes.pod.namespace : backend-prod
,则收集对应Pod中所有容器的日志。如果配置Label白名单为
io.kubernetes.container.name : worker-server
,则收集对应容器的日志。
Kubernetes不建议使用除
io.kubernetes.pod.namespace
和io.kubernetes.container.name
之外的其他Label。其他情况请使用IncludeEnv或ExcludeEnv,具体操作,请参见通过DaemonSet-控制台方式采集容器标准输出。
如果不需要Ingress日志采集,删除AliyunLogConfig配置即可。
创建配置文件k8s-nginx-ingress.yaml,YAML文件完整样例如下。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 配置名称,不能够重名。 name: k8s-nginx-ingress # 命名空间,放置于ingress controller所在命名空间,请按需修改。 namespace: kube-system spec: # logstore名称。 logstore: nginx-ingress # 产品Code,请勿更改。 productCode: k8s-nginx-ingress # 详细配置。 logtailConfig: inputType: plugin # logtail配置名称,需要和metadata.name保持一致。 configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: # docker容器中的标签信息。 # 容器名称为nginx-ingress-controller。 # 如果配置多个ingress controller请注意预防日志重复采集,详细请阅读注意事项中IncludeLabel释义。 io.kubernetes.container.name: nginx-ingress-controller Stderr: true Stdout: true processors: - type: processor_regex # 使用正则表达式提取字段。 detail: KeepSource: false Keys: # 提取出的字段名称,按照顺序排列。 - client_ip - x_forward_for - remote_user - time - method - url - version - status - body_bytes_sent - http_referer - http_user_agent - request_length - request_time - proxy_upstream_name - upstream_addr - upstream_response_length - upstream_response_time - upstream_status - req_id - host - proxy_alternative_upstream_name NoKeyError: true NoMatchError: true # 提取字段使用的正则表达式。符合该格式的日志,会将每个捕获组中内容映射到对应的字段上。 Regex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\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*)\s*\[*([^]]*)\]*.* SourceKey: content
执行以下命令,部署AliyunLogConfig的CRD配置。
kubectl apply -f k8s-nginx-ingress.yaml
查看Nginx Ingress日志与报表
登录日志服务控制台。
在Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为k8s-log-{cluster-id})。
在左侧导航栏单击仪表盘图标,然后在仪表盘列表中选择仪表盘名称,查看对应的分析报表。
Ingress概览
Ingress概览报表主要展示当前Nginx Ingress的整体状态,主要包括以下几类信息:
整体架构状态(1天),包括PV、UV、流量、响应延迟、移动端占比和错误比例等。
网站实时状态(1分钟),包括访问PV、访问UV、访问成功率、平均延迟、P95延迟和P99延迟等。
用户请求类信息(1天),包括1天访问PV对比、7天访问PV对比、地域分布、TOP访问省份、TOP访问城市、移动端占比和Android/iOS占比等。
TOP URL统计(1小时),包括访问TOP10、延迟TOP10、5XX错误TOP10和404错误TOP10。
Ingress访问中心
Ingress访问中心主要侧重于用于访问请求相关的统计信息,一般用于运营分析,包括今日UV、今日PV、UV分布、PV分布、TOP访问省份、TOP访问城市、TOP访问浏览器、TOP访问IP、移动端占比和Android/iOS占比等。
Ingress监控中心
Ingress监控中心主要侧重于网站实时监控数据,一般用于完整实时监控与告警,包括请求成功率、错误比例、5XX比例、请求未转发比例、平均延迟、P95延迟、P99延迟、P999延迟、状态码分布、Ingress压力分布、Service访问TOP10、Service错误TOP10、Service延迟TOP10和Service流量TOP10等。
Ingress蓝绿发布监控中心
Ingress蓝绿发布监控中心主要用于版本发布时的实时监控与对比(版本前后对比以及蓝绿版本当前对比),以便您在服务发布时快速检测异常并进行回滚。在该报表中您需要选择进行对比的蓝绿版本(ServiceA和ServiceB),报表将根据您的选择动态显示蓝绿版本相关指标,包括PV、5XX比例、成功率、平均延迟、P95延迟、P99延迟、P999延迟和流量等。
Ingress异常检测中心
Ingress异常检测中心基于日志服务提供的机器学习算法,通过多种时序分析算法从Nginx Ingress的指标中自动检测异常点,提高问题发现的效率。
配置告警
日志服务除提供交互式分析、可视化报表之外,您可直接基于上述报表快速配置告警,告警支持通知钉钉WebHook、短信、邮件和自定义WebHook等。
告警详细配置方法请参见设置告警。
下述示例为Nginx Ingress配置5XX比例的告警,告警每5分钟执行一次,当5XX比例超过1%时触发。
进入Ingress监控中心报表,鼠标滑动到图表5XX比例右上角的图标,在弹出的提示框中单击另存为告警(旧版)。
在创建告警面板中,填入告警名称、关联图表、频率、触发条件,查询语句中的
total
为5XX的百分比,因此触发条件输入total > 1。在下一步的通知中,根据您的需求选择对应的通知方式,并填入对应参数,然后单击提交,即可完成告警创建。
订阅定时报告
日志服务除支持通过告警方式通知外,还支持报表订阅功能,您可使用该功能将报表定期渲染成图片并通过邮件、钉钉群等方式发送。
订阅功能详细使用方法请参见订阅仪表盘。
下述示例为Ingress概览配置订阅功能,每天上午10点将报表发送到指定钉钉群。
进入Ingress概览V1.2报表,选择报表右上角的 。
在创建订阅面板中,频率选择每天、10:00,关闭添加水印选项,单击下一步。
通知类型中选择WebHook钉钉机器人,填入钉钉机器人的WebHook地址,然后单击提交,即可完成订阅。
使用Ingress Dashboard与ARMS进行联动排查
登录日志服务控制台。
在Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为k8s-log-{cluster-id})。
单击左侧列表的,在仪表盘列表查看Ingress概览V1.2仪表盘,获取您所需要的信息。
例如,定位Top10延迟URL区域,查看TOP10延迟URL的URL(ARMS排查)字段。您可以单击URL链接跳转到对应服务的ARMS监控链路查询页面并在ARMS控制台查询对应服务的查询调用链路详细情况。
相关文档
如果您需要对日志采集进行过滤,请参见过滤日志。