在 CentOS7 系统上部署 ELK(Elasticsearch + Logstash + Kibana)来采集 Pod 日志的步骤如下:

  1. 安装 Docker 和 Kubernetes

在 CentOS7 上安装 Docker 和 Kubernetes,具体步骤可以参考官方文档。

  1. 部署 Elasticsearch

使用 Kubernetes 部署 Elasticsearch,可以通过 Helm 工具来进行安装和管理。

首先,添加 Elasticsearch Helm 仓库:

helm repo add elastic https://helm.elastic.co
helm repo update

然后,安装 Elasticsearch:

helm install elasticsearch elastic/elasticsearch -n elk --create-namespace

这里使用 elk 命名空间,可以根据实际情况自行修改。

  1. 部署 Logstash

使用 Kubernetes 部署 Logstash,同样可以通过 Helm 工具来进行安装和管理。

首先,添加 Logstash Helm 仓库:

helm repo add elastic https://helm.elastic.co
helm repo update

然后,安装 Logstash:

helm install logstash elastic/logstash -n elk --create-namespace
  1. 部署 Kibana

使用 Kubernetes 部署 Kibana,同样可以通过 Helm 工具来进行安装和管理。

首先,添加 Kibana Helm 仓库:

helm repo add elastic https://helm.elastic.co
helm repo update

然后,安装 Kibana:

helm install kibana elastic/kibana -n elk --create-namespace
  1. 配置 Logstash

在 Logstash 中配置输入和输出,来采集 Pod 日志并发送到 Elasticsearch 中。

首先,创建 Logstash 配置文件 logstash.conf

input {
  tcp {
    port => 5000
    codec => json
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch-master:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

这里采用 TCP 输入方式,监听端口为 5000,使用 JSON 编码。输出到 Elasticsearch,使用索引 logs-年.月.日

然后,将配置文件挂载到 Logstash 容器中:

apiVersion: v1
kind: ConfigMap
metadata:
  name: logstash-conf
  namespace: elk
data:
  logstash.conf: |
    input {
      tcp {
        port => 5000
        codec => json
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://elasticsearch-master:9200"]
        index => "logs-%{+YYYY.MM.dd}"
      }
    }
    
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash
  namespace: elk
spec:
  replicas: 1
  selector:
    matchLabels:
      app: logstash
  template:
    metadata:
      labels:
        app: logstash
    spec:
      containers:
      - name: logstash
        image: docker.elastic.co/logstash/logstash:7.13.4
        volumeMounts:
        - name: logstash-conf
          mountPath: /usr/share/logstash/pipeline/
        ports:
        - containerPort: 5000
      volumes:
      - name: logstash-conf
        configMap:
          name: logstash-conf

这里使用 ConfigMap 挂载配置文件,然后在 Deployment 中将 ConfigMap 挂载到容器中。

  1. 部署 Fluentd

使用 Kubernetes 部署 Fluentd,作为采集 Pod 日志的代理,将数据发送到 Logstash 中。

首先,创建 Fluentd 配置文件 fluentd.conf

<source>
  @type tail
  path /var/log/containers/*.log
  pos_file /var/log/fluentd-containers.log.pos
  tag kubernetes.*
  read_from_head true
  <parse>
    @type json
    time_key time
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

<match kubernetes.**>
  @type forward
  <server>
    host logstash-logstash.elk.svc.cluster.local
    port 5000
  </server>
</match>

这里使用 Tail 输入方式,监听 /var/log/containers/*.log 目录下的日志文件,使用 JSON 解析器。输出到 Logstash,使用标签 kubernetes.*

然后,将配置文件挂载到 Fluentd 容器中:

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-conf
  namespace: kube-system
data:
  fluentd.conf: |
    <source>
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag kubernetes.*
      read_from_head true
      <parse>
        @type json
        time_key time
        time_format %Y-%m-%dT%H:%M:%S.%NZ
      </parse>
    </source>
    
    <match kubernetes.**>
      @type forward
      <server>
        host logstash-logstash.elk.svc.cluster.local
        port 5000
      </server>
    </match>
    
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.14.6-debian-elasticsearch7-1.0
        volumeMounts:
        - name: fluentd-conf
          mountPath: /fluentd/etc/fluent.conf
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: fluentd-conf
        configMap:
          name: fluentd-conf
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

这里使用 ConfigMap 挂载配置文件,然后在 DaemonSet 中将 ConfigMap 挂载到容器中。

  1. 部署 Kibana

使用 Kubernetes 部署 Kibana,同样可以通过 Helm 工具来进行安装和管理。

首先,添加 Kibana Helm 仓库:

helm repo add elastic https://helm.elastic.co
helm repo update

然后,安装 Kibana:

helm install kibana elastic/kibana -n elk --create-namespace
  1. 访问 Kibana

访问 Kibana 的方式与普通部署方式相同,可以通过浏览器访问 Kibana 的服务 IP 地址和端口号。

在 Kibana 中创建索引模式,选择对应的索引,即可查看 Pod 日志。

CentOS7系统在kubernete 12015 上部署 ELK采集 pod 日志

原文地址: https://www.cveoy.top/t/topic/bHAK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录