我们Kubernetes平台中日志收集,主要收集那些日志:
K8S系统的组件日志
K8S Cluster里面部署的应用程序日志

日志方案:

十、Kubernetes平台中日志收集-LMLPHP

容器中的日志怎么收集:

方案一:
Node上部署一个日志收集程序
DaemonSet方式部署日志收集程序
对本节点/var/log和 /var/lib/docker/containers/
两个目录下的日志进行采集
优点:
每个Node仅需部署一个日志收集程序,
资源消耗少,对应用无侵入
缺点:
应用程序日志需要写到标准输出和标准错误输出,
不支持多行日志

方案二:
Pod中附加专用日志收集的容器
每个运行应用程序的Pod中增加一个日志
收集容器,使用emtyDir共享日志目录让
日志收集程序读取到。
优点:
低耦合
缺点:
每个Pod启动一个日志收集代理,增加资源消耗, 并增加运维维护成本

方案三:
应用程序直接推送日志
开发直接定制了
优点:
无需额外收集工具
缺点:
浸入应用,增加应用复杂度

ELK安装

ELK官网:https://www.elastic.co/cn/
配置yum源参考:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html
安装jdk:

yum install -y java-1.8.0-openjdk

配置yum源:

[root@localhost ~]# cat /etc/yum.repos.d/elk.repo
[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装:

yum install -y logstatsh elasticsearch kibana -y

elasticsearch 关键配置:
network.host: 服务器IP地址
http.port: 9200
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

,注意,es需要优化一些内核参数。优化参数:

vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile  65536
* soft nproc  65536
* hard nproc  65536


vi /etc/security/limits.d/90-nproc.conf
*               soft    nproc           65535
*               hard    nproc           65535

运行:sysctl -p 生效配置。

kibana相关配置:

server.port: 5601
server.host: "服务器IP"
server.name: "kibana"
elasticsearch.url: "http://ES服务IP:9200"  #上面你的elasticsearch服务地址
elasticsearch.preserveHost: true
kibana.index: ".kibana"

kibana汉化参考:https://github.com/anbai-inc/Kibana_Hanization
git clone https://github.com/anbai-inc/Kibana_Hanization.git

 cd Kibana_Hanization/
 python main.py /usr/share/kibana

ok,汉化就完成了。

此时可以启动kibana,es

采集端filebeat,采集k8s集群日志

我们采用configmap的形式来保存filebeat配置,采用DaemonSet形式部署filebeat,
然后将配置文件和日志文件挂载到fiebeat,
,利用filebeat采集k8s集群日志:

[root@master elk]# cat k8s-logs.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system

data:
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /messages
        #标签
        fields:
          app: k8s
          type: module
        #代表第一层级,用于Kibana展示
        fields_under_root: true

    output.logstash:
      hosts: ['192.168.1.26:5044']

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  selector:
    matchLabels:
      project: k8s
      app: filebeat
  template:
    metadata:
      labels:
        project: k8s
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:6.5.4
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 500Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: k8s-logs
          mountPath: /messages
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
          type: File
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

运行, 创建filebeat采集端,根据/var/log/message.将目录挂载到容器,让filebeat读取:
创建:

kubectl apply -f k8s-logs.yaml

检测filebeat配置是否挂载进去:

 kubectl exec -it  k8s-logs-j96hw bash -n kube-system

[root@k8s-logs-j96hw filebeat]# more /messages
 ....

 [root@k8s-logs-j96hw filebeat]# cat /etc/filebeat.yml
filebeat.prospectors:
  - type: log
    paths:
      - /messages
    #标签
    fields:
      app: k8s
      type: module
    #代表第一层级,用于Kibana展示
    fields_under_root: true

output.logstash:
    hosts: ['192.168.1.26:5044']

配置logstash接收日志并且在kibana展示:

配置logstash接收日志配置。 stdout { codec => rubydebug }用于打印日志到控制台方便调试。

[root@localhost conf.d]# cat k8s.conf
input {
  beats {
     port => 5044
  }
}


filter {
}

output {
           elasticsearch {
              hosts => ["http://192.168.1.25:9200"]
              index => "k8s-log-%{+YYYY.MM.dd}"
           }
	   stdout { codec => rubydebug }
        }

运行logstash:

 /usr/share/logstash/bin/logstash -f k8s.conf

控制台输出

十、Kubernetes平台中日志收集-LMLPHP
kibana建立索引展示:
建立索引在系统管理–>create index pattern中

十、Kubernetes平台中日志收集-LMLPHP

01-22 09:14