如何通过Log-Pilot来采集Kubernetes Pod日志

简介: 本文主要跟大家分享下如何通过Log-Pilot来配置采集Kubernetes集群中Pod的日志。

在前面 容器日志采集利器Log-Pilot 中主要跟大家介绍了一个智能的容器日志采集利器,它采用声明式的日志采集配置方式,能自动地发现和采集应用容器的日志;它不仅能够采集容器的标准输出日志,同时还能够采集容器内部的文件日志。

本文主要跟大家分享下如何通过Log-Pilot来配置采集Kubernetes集群中Pod的日志到ElasticSearch集群中;当然Log-Pilot不仅局限于此,它还可以采集Swarm集群乃至直接通过docker run运行的容器的日志,具体可参考Log-Pilot QuickStart

image

准备工作

  1. 您已经成功部署了一个Kubernetes集群,也可直接通过阿里云容器服务控制台来申请Kubernetes集群。
  2. 配置本地通过kubectl连接Kubernetes集群,当然也可直接在Master节点上操作。

部署ElasticSearch集群

鉴于ES集群的稳定性考虑以及未来的系统维护成本,这里我们可直接通过阿里云ElasticSearch控制台创建一个ElasticSearch集群:

image
说明:您可依据自身实际业务的日志数据情况来选择合适的版本、集群节点数以及规格等。

开启自动创建索引

默认情况下阿里云ElasticSearch集群当新增的文档发现没有索引时,不允许自动创建索引,而Log-Pilot在自动采集容器日志时需要依据日志采集配置来自动创建文档索引,因此我们这里需要开启自动创建索引功能:

image

部署Log-Pilot组件

为降低节点的资源消耗,Log-Pilot组件采用的是DaemonSet方式部署到每个集群的Node节点上,YAML可参考如下:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: log-pilot
  labels:
    app: log-pilot
  # 设置期望部署的namespace
  namespace: kube-system
spec:
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: log-pilot
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      # 是否允许部署到Master节点上
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: log-pilot
        # 版本请参考https://github.com/AliyunContainerService/log-pilot/releases
        image: registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.6-filebeat
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 200m
            memory: 200Mi
        env:
          - name: "NODE_NAME"
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: "LOGGING_OUTPUT"
            value: "elasticsearch"
          # 请确保集群到ES网络可达
          - name: "ELASTICSEARCH_HOSTS"
            value: "{es_endpoint}:{es_port}"
          # 配置ES访问权限
          - name: "ELASTICSEARCH_USER"
            value: "{es_username}"
          - name: "ELASTICSEARCH_PASSWORD"
            value: "{es_password}"
        volumeMounts:
        - name: sock
          mountPath: /var/run/docker.sock
        - name: root
          mountPath: /host
          readOnly: true
        - name: varlib
          mountPath: /var/lib/filebeat
        - name: varlog
          mountPath: /var/log/filebeat
        - name: localtime
          mountPath: /etc/localtime
          readOnly: true
        livenessProbe:
          failureThreshold: 3
          exec:
            command:
            - /pilot/healthz
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 2
        securityContext:
          capabilities:
            add:
            - SYS_ADMIN
      terminationGracePeriodSeconds: 30
      volumes:
      - name: sock
        hostPath:
          path: /var/run/docker.sock
      - name: root
        hostPath:
          path: /
      - name: varlib
        hostPath:
          path: /var/lib/filebeat
          type: DirectoryOrCreate
      - name: varlog
        hostPath:
          path: /var/log/filebeat
          type: DirectoryOrCreate
      - name: localtime
        hostPath:
          path: /etc/localtime

参数说明:

  1. {es_endpoint}:ES集群的访问地址,若跟Kubernetes集群在同一个VPC下,则可直接使用私网地址;请务必确保到ES集群网络可达
  2. {es_port}:ES集群的访问端口,一般是9200。
  3. {es_username}:访问ES集群的用户名。
  4. {es_password}:访问ES集群的用户密码。

部署完成后,可通过如下命令确认是否正常运行:

  ~ kubectl apply -f log-pilot.yml
daemonset.extensions "log-pilot" created
  ~ kubectl -n kube-system get pod | grep log-pilot
log-pilot-458nj                                              1/1       Running   0          23s
log-pilot-8ld4n                                              1/1       Running   0          23s
log-pilot-b4kqv                                              1/1       Running   0          23s
log-pilot-gd588                                              1/1       Running   0          23s
log-pilot-k2ttk                                              1/1       Running   0          23s

采集应用日志

这里以一个Tomcat为例来说明如何配置应用的日志采集配置(配置方式同样适用Deploment和StatefulSet):

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: "tomcat:7.0"
    env:
    # 1、stdout为约定关键字,表示采集标准输出日志
    # 2、配置标准输出日志采集到ES的catalina索引下
    - name: aliyun_logs_catalina
      value: "stdout"
    # 1、配置采集容器内文件日志,支持通配符
    # 2、配置该日志采集到ES的access索引下
    - name: aliyun_logs_access
      value: "/usr/local/tomcat/logs/catalina.*.log"
    # 容器内文件日志路径需要配置emptyDir
    volumeMounts:
      - name: tomcat-log
        mountPath: /usr/local/tomcat/logs
  volumes:
    - name: tomcat-log
      emptyDir: {}

部署成功后稍等几秒钟,我们可以看到tomcat的日志被采集到了指定的ES集群中:
image

注意:Log-Pilot默认采集日志到ES集群时会自动创建格式为 index-yyyy.MM.dd 的索引

因此,我们可以看到只需要通过上面简单的配置就可以很方便地将Kubernetes集群中Pod的标准输出日志和容器内文件日志采集到ElasticSearch集群中。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
12月前
|
数据采集 存储 大数据
大数据之路:阿里巴巴大数据实践——日志采集与数据同步
本资料全面介绍大数据处理技术架构,涵盖数据采集、同步、计算与服务全流程。内容包括Web/App端日志采集方案、数据同步工具DataX与TimeTunnel、离线与实时数仓架构、OneData方法论及元数据管理等核心内容,适用于构建企业级数据平台体系。
1184 1
|
9月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
486 1
|
10月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
596 16
|
11月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
1482 1
|
12月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5091 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
636 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1369 55

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多