CentOS7系统在kubernete 12015 上部署 ELK采集 pod 日志
在 CentOS7 系统上部署 ELK(Elasticsearch + Logstash + Kibana)来采集 Pod 日志的步骤如下:
- 安装 Docker 和 Kubernetes
在 CentOS7 上安装 Docker 和 Kubernetes,具体步骤可以参考官方文档。
- 部署 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 命名空间,可以根据实际情况自行修改。
- 部署 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
- 部署 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
- 配置 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 挂载到容器中。
- 部署 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 挂载到容器中。
- 部署 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
- 访问 Kibana
访问 Kibana 的方式与普通部署方式相同,可以通过浏览器访问 Kibana 的服务 IP 地址和端口号。
在 Kibana 中创建索引模式,选择对应的索引,即可查看 Pod 日志。
原文地址: https://www.cveoy.top/t/topic/bHAK 著作权归作者所有。请勿转载和采集!