Kubernetes 利用开源组件Log-pilot收集容器日志 | Eddie'Blog
Kubernetes 利用开源组件Log-pilot收集容器日志

Kubernetes 利用开源组件Log-pilot收集容器日志

eddie 542 2020-09-03

目录

参考

https://help.aliyun.com/document_detail/86552.html?spm=a2c4g.11186623.6.819.db321cb0CDGl4W

版本

Kubernetes版本: 1.16.9-aliyun.1
Elasticsearch版本: 6.8.12
Kibana: 6.8.12
Log-pilot: 0.9.6-filebeat

前提条件

已经拥有一个 kubernetes 集群, 并且创建命名空间 elk

相关技术

  • Elasticsearch
  • Kibana
  • Log-pilot

部署 elasticsearch

kubectl apply -f http://qiniuyun.eddilee.cn/elasticsearch.yaml

部署 log-pilot

日志采集工具

kubectl apply -f http://qiniuyun.eddilee.cn/log-pilot.yaml

TIPS

Log-pilot 修改filebeat.tpl文件,日志多行日志输出修改.

1、进入pod
2、修改文件
vi /pilot/filebeat.tpl
...
- {{ .HostDir }}/{{ .File }}     # 追加下面的
  multiline.pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 10000          
  multiline.timeout: 15s
  scan_frequency: 10s    # 追加上面的
...
  
之后可以自己构建docker镜像,本章没有构建这部分,读者手动吧!

部署 kibana

UI页面操作

kubectl apply -f http://qiniuyun.eddilee.cn/kibana.yaml

使用Dockfile构建测试镜像

FROM registry.cn-shenzhen.aliyuncs.com/open-image/centos7_jdk8_maven:v1.0
MAINTAINER eddie.lee
VOLUME /tmp
ADD ./target/eddie.jar /api.jar
#EXPOSE 8080
ENTRYPOINT ["sh" , "/exec.sh", "restart"]

TIPS 若用 nohup java jar api.jat >> /var/log/api.log 2>&1 & 在Dockerfile标准输出不成功

建立测试Pod

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: java-eddie-prod
spec:
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  selector:
    matchLabels:
      app: java-eddie-prod
  replicas: 3
  template:
    metadata:
      labels:
        app: java-eddie-prod
    spec:
      containers:
        - name: java-eddie-prod
          image: ${ORIGIN_REPO}/${REPO}:${IMAGE_TAG}
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          resources:
            requests:
              memory: 1024Mi
            limits:
              memory: 2048Mi
          env:
            - name: aliyun_logs_catalina
              value: "stdout"
            - name: aliyun_logs_prod-eddie-roll
              value: "/var/log/*.log"
          volumeMounts:
            - mountPath: /var/log/
              name: java-eddie-prod
      volumes:
        - name: java-eddie-prod
          emptyDir: {}

elasticsearch 自动创建索引

  • aliyun_logs_catalina=stdout表示要收集容器的 stdout 日志
  • aliyun_logs_prod-eddie-roll="/var/log/.log"表示要收集容器内"/var/log/"目录下所有名字匹配.log的文件日志

调式

进入ES容器查看

[root@eddie logs]# kubectl exec -it  elasticsearch-1 bash -n elk
[root@elasticsearch-1 elasticsearch]# curl 'localhost:9200/_cat/indices?v' 
health status index                                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   prod-eddie-roll-2020.09.03             _xRmIw0kSyqPQZ0KKP2YNA   5   1      16404            0     13.1mb          6.5mb
green  open   .kibana_task_manager                  5H0qXxNDTvmaq3ulakyP8w   1   1          2            0     19.3kb         12.5kb
green  open   .kibana_1                             iDBJgUgYRzyGJhUr31goyw   1   1         11            2     73.1kb         36.5kb

登录 Kibana

  • kibana.eddilee.cn

1、查看索引是否与ES容器建立的一致
图片.png

2、创建 index pattern
图片.png

3、点击左边按钮“Discover” 即刻查看日志

结束

感谢观看,文章始于原创,转载请备注作者 eddie.lee 与博客连接。