专栏首页k8s_istio​K8S日志收集:容器日志输出JSON,自动采集至Elasticsearch
原创

​K8S日志收集:容器日志输出JSON,自动采集至Elasticsearch

以腾讯云的容器服务为例,将容器内日志输出到腾讯云的日志服务(基于 ES)

环境信息

  • 应用:基础镜像是 nginx,运行静态页面
  • K8S: 1.18

核心流程:日志打印到容器标准输出 -> 采集容器标准输出到 ES

1. 将 nginx 的日志输出格式设置为 JSON

修改 /etc/nginx/nginx.conf文件,将日志输出为 JSON 格式。(其实就是构建一个 JSON 字符串)

http {
##...
    log_format log_json '{"@timestamp": "$time_local", '
                        '"remote_addr": "$remote_addr", '
                        '"referer": "$http_referer", '
                        '"request": "$request", '
                        '"status": $status, '
                        '"bytes": $body_bytes_sent, '
                        '"agent": "$http_user_agent", '
                        '"x_forwarded": "$http_x_forwarded_for", '
                        '"gzip_ratio": "$gzip_ratio",'
                        '"scheme": "$scheme",'
                        '"request_method": "$request_method",'
                        '"request_time": "$request_time"'
                        ' }';

    access_log  /var/log/nginx/access.log  log_json;
##...
}

如果想拿到镜像中默认的 nginx 配置,可以通过 docker cp 命令获取。

接着,修改 dockerfile,新增 挂载 nginx 配置文件的行。

FROM nginx:xxxxxxxx
WORKDIR /usr/share/nginx/html
ADD etc/nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

在 nginx 镜像中,日志文件是输出到标准输出(/dev/stdout)的,所以不需要特别指定。

$ docker exec -it 4071569c24ff ls -lh /var/log/nginx/
total 0
lrwxrwxrwx    1 root     root          11 Dec 17 23:01 access.log -> /dev/stdout
lrwxrwxrwx    1 root     root          11 Dec 17 23:01 error.log -> /dev/stderr

docker build 新的镜像,部署到 K8S 上后,请求几条数据,可以查看容器的日志输出效果为:

$ docker logs 4071569c24ff
{"@timestamp": "07/Mar/2021:19:11:28 +0800", "remote_addr": "127.0.0.1", "referer": "-", "request": "GET /gitbook/gitbook-plugin-splitter/splitter.js HTTP/1.1", "status": 200, "bytes": 3864, "agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)", "x_forwarded": "111.206.198.24", "gzip_ratio": "-","scheme": "http","request_method": "GET","request_time": "0.000" }

2. 创建日志收集规则

在【容器服务】->【日志规则】中,新增一个日志采集规则,选择上述应用对应的工作负载。

【容器服务】->【日志规则】

设置输出模式为 JSON

设置输出模式为 JSON

3. 设置索引

在日志服务页面,找到上面 设置的日志集,设置索引。

先访问自己的服务,生成几条日志,这样可以使用下图中的【自动配置】功能。

设置索引

效果

检索分析 中可以查找日志,也可以创建仪表盘。

用户访问的数据,10秒左右就可以查到,效果不错。

腾讯云容器服务在产品融合这块做的不错,把 日志服务 和 容器服务 打通了。

检索分析

reference

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes-基于EFK进行统一的日志管理

    通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,...

    菲宇
  • Kubernetes 集群日志监控 EFK 安装

    Kubernetes 集群中会编排非常多的服务,各个服务不可能保证服务一定能稳定的运行,于是每个服务都会打印出各自的日志信息方便调试。由于服务的众多,每个服务挨...

    高楼Zee
  • 在 Kubernetes 上搭建 EFK 日志收集系统

    上节课和大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluen...

    我是阳明
  • 一文彻底搞定 EFK 日志收集系统

    前面大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd...

    我是阳明
  • 使用 EFKLK 搭建 Kubernetes 日志收集工具栈

    前面大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd...

    CNCF
  • TKE中部署EFK日志收集

    通过DaemonSet在每一台Node节点上跑一个Filebeat或fluentd,然后通过挂载的形式将容器日志与该Pod关联,从而处理发送至后端存储;

    蒋经纬
  • Kubernetes实战之部署ELK Stack收集平台日志

    ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsea...

    没有故事的陈师傅
  • Logging Operator - 优雅的云原生日志管理方案 (二)

    本文承接上文,主要讲解Logging Operator中除logging外的CRD应用。在开始之前,我们还是先看下Logging Operator对K8S中处理...

    我是阳明
  • 关于K8s集群器日志收集的总结

    Rainbond开源

扫码关注云+社区

领取腾讯云代金券