在 Kubernetes Ingress 高可靠部署最佳实践 中从部署层面介绍了在Kubernetes集群中如何部署一套高可靠的Ingress接入层,同时Ingress作为所有集群服务请求的入口,其记录的请求日志对于整个请求跟踪链路至关重要,今天主要给大家分享下如何将K8S Ingress Controller日志采集到日志服务中,以便于检索分析服务请求情况。
环境准备
- 通过阿里云容器服务控制台申请K8S集群。
- 部署业务服务并配置Ingress对外提供访问。
采集到阿里云日志服务
当我们需要将Ingress Controller的日志采集到阿里云日志服务时,我们只需要简单通过下面几步即可完成:
- 部署Logtail DaemonSet
- 创建日志Project及配置机器组
- 配置容器采集配置LogtailConfig
详细说明可参考这里。
步骤一:部署Logtail DaemonSet
注:如果您之前已经在集群中部署过Logtail DaemonSet则可跳过该步骤
curl http://logtail-release.oss-cn-hangzhou.aliyuncs.com/docker/k8s/logtail-daemonset.yaml > logtail-daemonset.yaml
# 依据自身环境修改下面配置项
vim logtail-daemonset.yaml
...
env:
- name: "ALIYUN_LOGTAIL_CONFIG"
value: "/etc/ilogtail/conf/${your_region_name}/ilogtail_config.json"
- name: "ALIYUN_LOGTAIL_USER_ID"
value: "${your_aliyun_user_id}"
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "${your_machine_group_name}"
...
kubectl apply -f logtail-daemonset.yaml
daemonset "logtail" created
kubectl -n kube-system get pod | grep logtail
logtail-nbpl8 1/1 Running 0 52s
logtail-nr9hf 1/1 Running 0 52s
配置参数说明:
- ${your_region_name}:K8S集群所在Regoin ID
- ${your_aliyun_user_id}:阿里云UID
- ${your_machine_group_name}:用户自定义标识,依据该值来配置机器组
步骤二:创建日志Project及配置机器组
注:如果您已经在对应Region创建了用于该K8S集群日志采集的Project且准备复用则可跳过该步骤
1、通过阿里云日志服务创建日志Project:
注:日志Project所在Region必须与K8S集群保持一致。
2、配置机器组:
注:这里选择用户自定义标识
,同时其值必须与步骤一中Logtail DaemonSet YAML中的环境变量ALIYUN_LOGTAIL_USER_DEFINED_ID
的值保持一致。
步骤三:配置容器采集配置LogtailConfig
1、创建LogStore:注:可直接复用已经创建好的日志库
2、配置容器采集配置数据类型:
注:由于Ingress Controller日志是输出到Stdout,因此这里我们需要选择Docker标准输出
3、配置容器采集配置数据源:
更多配置参数可参考这里,这里表明需要采集容器Label中包含"io.kubernetes.container.name": "nginx-ingress-controller"
的Stdout和Stderr日志。
4、配置关联机器组:
5、查看Ingress Controller请求日志:
通过Ingress访问集群内部服务,在日志库k8s-ingress-controller中查看采集到的Ingress Controller请求日志。
采集到自建ES
同样如果我们希望将K8S集群Pod日志采集到自建的Elasticsearch日志服务中,阿里云容器服务也提供了相应的解决方案,具体可参考 [利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案],这里主要说明如何配置采集Ingress Controller的日志到ES中。
步骤一:部署 log-pilot + elasticsearch + kibana 服务
注:如果您之前已经在集群中部署过 log-pilot + elasticsearch + kibana 服务则可跳过该步骤
部署详细说明可参考 [利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案]
步骤二:配置容器日志采集配置
采集Ingress Controller的日志,我们需要添加日志采集配置:
vim nginx-ingress-controller-log-patch.yaml
spec:
template:
spec:
containers:
- name: nginx-ingress-controller
env:
# ingress-controller为索引名称
- name: aliyun_logs_ingress-controller
value: "stdout"
# 若您是通过Deployment部署的nginx-ingress-controller:
kubectl -n kube-system patch deployment nginx-ingress-controller --patch "$(cat nginx-ingress-controller-log-patch.yaml)"
# 若您是通过DaemonSet部署的nginx-ingress-controller:
kubectl -n kube-system patch ds nginx-ingress-controller --patch "$(cat nginx-ingress-controller-log-patch.yaml)"
经过上面两步,已经完成配置Ingress Controller日志采集到自建ES中,最后通过Ingress访问集群内部服务,在Kibana中查看采集到的Ingress Controller请求日志: