logPilot+elasticsearch+kibana监控k8s容器日志

阅读: 评论:0

logPilot+elasticsearch+kibana监控k8s容器⽇志
开发者在⾯对 kubernetes 分布式集下的⽇志需求时,常常会感到头疼,既有容器⾃⾝特性的原因,也有现有⽇志采集⼯具的桎梏,主要包括:
容器本⾝特性:
采集⽬标多:容器本⾝的特性导致采集⽬标多,需要采集容器内⽇志、容器 stdout。对于容器内部的⽂件⽇志采集,现在并没有⼀个很好的⼯具能够去动态发现采集。针对每种数据源都有对应的采集软件,但缺乏⼀站式的⼯具。
弹性伸缩难:kubernetes 是分布式的集,服务、环境的弹性伸缩对于⽇志采集带来了很⼤的困难,⽆法像传统虚拟机环境下那样,事先配置好⽇志的采集路径等信息,采集的动态性以及数据完整性是⾮常⼤的挑战。
现有⽇志⼯具的⼀些缺陷:
缺乏动态配置的能⼒。⽬前的采集⼯具都需要事先⼿动配置好⽇志采集⽅式和路径等信息,因为它⽆法能够⾃动感知到容器的⽣命周期变化或者动态漂移,所以它⽆法动态地去配置。
⽇志采集重复或丢失的问题。因为现在的⼀些采集⼯具基本上是通过 tail 的⽅式来进⾏⽇志采集的,那么这⾥就可能存在两个⽅⾯的问题:⼀个是可能导致⽇志丢失,⽐如采集⼯具在重启的过程中,⽽应⽤依然在写⽇志,那么就有可能导致这个窗⼝期的⽇志丢失;⽽对于这种情况⼀般保守的做法就是,默认往前多采集 1M ⽇志或 2M 的⽇志,那么这就⼜会可能引起⽇志采集重复的问题。
未明确标记⽇志源。因为⼀个应⽤可能有很多个容器,输出的应⽤⽇志也是⼀样的,那么当我们将所有应⽤⽇志收集到统⼀⽇志存储后端时,在搜索⽇志的时候,我们就⽆法明确这条⽇志具体是哪⼀个节点上的哪⼀个应⽤容器产⽣的。
本⽂档将介绍⼀种 Docker ⽇志收集⼯具 log-pilot,结合 Elasticsearch 和 kibana 等⼯具,形成⼀套适⽤于 kubernetes 环境下的⼀站式⽇志解决⽅案。虹吸式咖啡壶
log-pilot 介绍
log-Pilot 是⼀个智能容器⽇志采集⼯具,它不仅能够⾼效便捷地将容器⽇志采集输出到多种存储⽇志后端,同时还能够动态地发现和采集容器内部的⽇志⽂件。
针对前⾯提出的⽇志采集难题,log-pilot 通过声明式配置实现强⼤的容器事件管理,可同时获取容器标准输出和内部⽂件⽇志,解决了动态伸缩问题,此外,log-pilot 具有⾃动发现机制,CheckPoint 及句柄保持的机制,⾃动⽇志数据打标,有效应对动态配置、⽇志重复和丢失以及⽇志源标记等问题。
针对容器⽇志的声明式配置
Log-Pilot ⽀持容器事件管理,它能够动态地监听容器的事件变化,然后依据容器的标签来进⾏解析,⽣成⽇志采集配置⽂件,然后交由采集插件来进⾏⽇志采集。
在 kubernetes 下,Log-Pilot 可以依据环境变量 aliyun_logs_$name = $path 动态地⽣成⽇志采集配置⽂件,其中包含两个变量:
炼焦配煤$name 是我们⾃定义的⼀个字符串,它在不同的场景下指代不同的含义,在本场景中,将⽇志采集到 ElasticSearch 的时候,这个$name 表⽰的是 Index。
另⼀个是 $path,⽀持两种输⼊形式,stdout 和容器内部⽇志⽂件的路径,对应⽇志标准输出和容器内的⽇志⽂件。
第⼀种约定关键字 stdout 表⽰的是采集容器的标准输出⽇志,如本例中我们要采集 tomcat 容器⽇志,那么我们通过配置标签
aliyun.logs.catalina=stdout 来采集 tomcat 标准输出⽇志。
第⼆种是容器内部⽇志⽂件的路径,也⽀持通配符的⽅式,通过配置环境变量 aliyun_logs_access=/u
sr/local/tomcat/logs/*.log来采集 tomcat 容器内部的⽇志。当然如果你不想使⽤ aliyun 这个关键字,Log-Pilot 也提供了环境变量 PILOT_LOG_PREFIX 可以指定⾃⼰的声明式⽇志配置前缀,⽐如 PILOT_LOG_PREFIX: "aliyun,custom"。
此外,Log-Pilot 还⽀持多种⽇志解析格式,通过 aliyun_logs_$name_format= 标签就可以告诉 Log-Pilot 在采集⽇志的时候,同时以什么样的格式来解析⽇志记录,⽀持的格式包括:none、json、csv、nginx、apache2 和 regxp。
Log-Pilot 同时⽀持⾃定义 tag,我们可以在环境变量⾥配置 aliyun_logs_$name_tags="K1=V1,K2=V2",那么在采集⽇志的时候也会将 K1=V1 和 K2=V2 采集到容器的⽇志输出中。⾃定义 tag 可帮助您给⽇志产⽣的环境打上 tag,⽅便进⾏⽇志统计、⽇志路由和⽇志过滤。
⽇志采集模式
本⽂档采⽤ node ⽅式进⾏部署,通过在每台机器上部署⼀个 log-pilot 实例,收集机器上所有 Docker 应⽤⽇志。
该⽅案跟在每个 Pod 中都部署⼀个 logging 容器的模式相⽐,最明显的优势就是占⽤资源较少,在集规模⽐较⼤的情况下表现出的优势越明显,这也是社区推荐的⼀种模式。
步骤1 部署 elasticsearch
1. 连接到您的 Kubernetes 集。具体操作参见通过SSH访问Kubernetes集 或 通过 kubectl 连接 Kubernetes 集。
2. ⾸先部署 elasticsearch 相关服务,该编排模板包含⼀个 elasticsearch-api 的服务、elasticsearch-discovery 的服务和
镁合金微弧氧化加工elasticsearch 的状态集,这些对象都会部署在 kube-system 命名空间下。
kubectl apply -f acs-logging.oss-cn-hangzhou.l
蛋白层析系统1. 部署成功后,kube-system 命名空间下会出现相关对象,执⾏以下命令查看运⾏情况。
[root@kube-master log-pilot]# kubectl get svc,sts -n kube-system
NAME                              TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)                  AGE
service/elasticsearch-api        ClusterIP  10.245.246.19    <none>        9200/TCP                83m
service/elasticsearch-discovery  ClusterIP  10.245.235.227  <none>        9300/TCP                83m
service/kibana                    NodePort    10.245.82.6      <none>        80:31526/TCP            83m
NAME                            READY  AGE
statefulset.apps/elasticsearch  3/3    83m
步骤2 部署 log-pilot 和 kibana 服务
1. 部署 log-pilot ⽇志采集⼯具,如下所⽰:
kubectl apply -f acs-logging.oss-cn-hangzhou.l
1. 部署 kibana 服务,该编排⽰例包含⼀个 service 和⼀个 deployment。
kubectl apply -f acs-logging.oss-cn-hangzhou.l
步骤3 部署测试应⽤ tomcat
在 elasticsearch + log-pilot + Kibana 这套⽇志⼯具部署完毕后,现在开始部署⼀个⽇志测试应⽤ tomcat,来测试⽇志是否能正常采集、索引和显⽰。
编排模板如下。
[root@kube-master log-pilot]# cat tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat
namespace: default
labels:
name: tomcat
spec:
containers:
钢管加工- image: tomcat
name: tomcat-test
volumeMounts:
- mountPath: /usr/local/tomcat/logs
name: accesslogs
env:
- name: aliyun_logs_catalina-stdout
value: "stdout"
- name: aliyun_logs_catalina
value: "/usr/local/tomcat/logs/catalina.*.log"
- name: aliyun_logs_access
value: "/usr/local/tomcat/logs/localhost_access_log.*.txt"
volumes:
-
name: accesslogs
emptyDir: {}
网络课堂系统omcat 镜像属于少数同时使⽤了 stdout 和⽂件⽇志的 Docker 镜像,适合本⽂档的演⽰。在上⾯的编排中,通过在 pod 中定义环境变量的⽅式,动态地⽣成⽇志采集配置⽂件,环境变量的具体说明如下:
1. aliyun_logs_catalina=stdout表⽰要收集容器的 stdout ⽇志。
2. aliyun_logs_access=/usr/local/tomcat/logs/localhost_ 表⽰要收集容器内 /usr/local/tomcat/logs/ ⽬录下
所有名字匹配 localhost_ 的⽂件⽇志。
在本⽅案的 elasticsearch 场景下,环境变量中的 $name 表⽰ Index,本例中 $name即是 catalina、catalina-stdout 和 access 。
步骤 4 获取kibana得svc,默认kibana得service type为nodeport,通过k8s ip+ nodeport访问kibana
[root@kube-master log-pilot]# kubectl get svc -n kube-system
NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)                  AGE
elasticsearch-api        ClusterIP  10.245.246.19    <none>        9200/TCP                89m
elasticsearch-discovery  ClusterIP  10.245.235.227  <none>        9300/TCP                89m
kibana                    NodePort    10.245.82.6      <none>        80:31526/TCP            89m
单击左侧导航栏中的management ,然后单击Index Patterns > Create Index Pattern。具体的索引名称会在 $name变量后缀⼀个时间字符串,您可以配合通配符 * 进⾏创建。本例中使⽤ $name* 来创建 Index Pattern。
您也可以执⾏以下命令,进⼊ elasticsearch 对应的 pod,在 index 下列出 elasticsearch 的所有索引
[root@kube-master log-pilot]# kubectl get pods -A -l app=es
NAMESPACE    NAME              READY  STATUS    RESTARTS  AGE
kube-system  elasticsearch-0  1/1    Running  0          87m
kube-system  elasticsearch-1  1/1    Running  0          86m
kube-system  elasticsearch-2  1/1    Running  0          85m
[root@kube-master log-pilot]# kubectl exec -it elasticsearch-0 -n kube-system -- bash
elasticsearch@elasticsearch-0:/usr/share/elasticsearch$ curl 'localhost:9200/_cat/indices?v'
health status index                      uuid                  pri unt docs.deleted store.size pri.store.s
ize
green  open  .kibana                    uzM03HQiSfapnZXkgq2vWg  1  1          4            0    48.6kb        24.3kb
green  open  catalina-2019.08.29        5EZoJzmPRXS9X4TInJ2oqQ  5  1        44            0    203.8kb        101.9kb
green  open  access-2019.08.29          Q2mtVT2vThSomv9XQmuYjg  5  1          9            0    151.3kb        75.6kb
green  open  catalina-stdout-2019.08.29 VmepvHN6Sq6UvP-RH81Qgw  5  1        44            0      211kb        105.4kb
索引创建完毕后,单击左侧导航栏中的Discover,然后选择前⾯创建的 Index,选择合适的时间段,在搜索栏输⼊相关字段,就可以查询相关的⽇志。

本文发布于:2023-06-18 02:17:33,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/142895.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:采集   容器   配置   动态   输出   集群   相关
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图