文章目录
前言
Filebeat+ELK的构建与解释参考
链接: k8s学习–基于k8s的ELK日志收集的详细过程
本章不再重复描述
环境
虚拟机
Ip | 主机名 | cpu | 内存 | 硬盘 |
---|---|---|---|---|
192.168.10.11 | master01 | 2cpu双核 | 4G | 100G |
192.168.10.12 | worker01 | 2cpu双核 | 4G | 100G |
192.168.10.13 | worker02 | 2cpu双核 | 4G | 100G |
192.168.10.17 | ELK | 1cpu双核 | 4G | 100G |
版本 centos7.9
已部署k8s-1.27
ELK服务器已部署Filebeat+ELK
通过在应用程序Pod中运行filebeat(sidecar边车)实现,本次将以tomcat为例进行说明。
一、准备tomcat数据目录
默认tomcat容器中没有网站首页文件,不添加会导致pod中容器无法正常运行。
work01主机操作
mkdir /opt/tomcatwebroot
echo "tomcat is running" > /opt/tomcatwebroot/index.html
二、编写tomcat应用资源清单文件
master主机操作
vim tomcat-logs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
project: www
app: tomcat-demo
template:
metadata:
labels:
project: www
app: tomcat-demo
spec:
nodeName: worker01
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
resources:
requests:
cpu: 0.5
memory: 500Mi
limits:
cpu: 1
memory: 1Gi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
volumeMounts:
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
- name: tomcatwebroot
mountPath: /usr/local/tomcat/webapps/ROOT
- name: filebeat
image: docker.io/elastic/filebeat:7.17.2
imagePullPolicy: IfNotPresent
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
volumes:
- name: tomcat-logs
emptyDir: {}
- name: tomcatwebroot
hostPath:
path: /opt/tomcatwebroot
type: Directory
- name: filebeat-config
configMap:
name: filebeat-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: default
data:
filebeat.yml: |-
filebeat.inputs:
- type: log
paths:
- /usr/local/tomcat/logs/catalina.*
fields:
app: www
type: tomcat-catalina
fields_under_root: true
multiline:
pattern: '^\['
negate: true
match: after
setup.ilm.enabled: false
setup.template.name: "tomcat-catalina"
setup.template.pattern: "tomcat-catalina-*"
output.logstash:
hosts: ['192.168.10.17:5056']
这个yaml定义了一个 Tomcat 和 Filebeat 的 Deployment 以及 Filebeat 的配置文件,让我们依次解释一下
部署文件 (Deployment)部分
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
project: www
app: tomcat-demo
template:
metadata:
labels:
project: www
app: tomcat-demo
spec:
nodeName: worker01
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
resources:
requests:
cpu: 0.5
memory: 500Mi
limits:
cpu: 1
memory: 1Gi
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 20
volumeMounts:
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
- name: tomcatwebroot
mountPath: /usr/local/tomcat/webapps/ROOT
- name: filebeat
image: docker.io/elastic/filebeat:7.17.2
imagePullPolicy: IfNotPresent
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: tomcat-logs
mountPath: /usr/local/tomcat/logs
volumes:
- name: tomcat-logs
emptyDir: {}
- name: tomcatwebroot
hostPath:
path: /opt/tomcatwebroot
type: Directory
- name: filebeat-config
configMap:
name: filebeat-config
metadata: 定义了 Deployment 的名称和命名空间。
spec: 包含 Deployment 的详细规范。
replicas: 指定了副本数量,即运行两个 Tomcat 实例。
selector: 定义了选择器,用于匹配 Pod 标签。
template: 描述了 Pod 模板,包括 metadata 和 spec。
nodeName: 指定了 Pod 运行的节点名称(worker01)。
containers: 定义了两个容器:Tomcat 和 Filebeat。
Tomcat 容器:
image: 使用 tomcat:latest 镜像。
ports: 暴露 8080 端口。
resources: 定义了资源请求和限制。
livenessProbe 和 readinessProbe: 用于健康检查。
volumeMounts: 挂载了两个卷。
Filebeat 容器:
image: 使用 filebeat:7.17.2 镜像。
args: 指定了启动参数。
resources: 定义了资源请求和限制。
securityContext: 以 root 用户运行。
volumeMounts: 挂载了两个卷。
volumes:
tomcat-logs: 使用 emptyDir 卷。
tomcatwebroot: 使用 hostPath 卷。
filebeat-config: 使用 ConfigMap 卷。
配置文件 (ConfigMap)部分
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
解释
metadata: 定义了 ConfigMap 的名称。
data: 应包含 Filebeat 的配置内容(在此省略)。
三、编写logstash配置文件
elk主机配置
编写logstash配置文件,不影响以往配置文件
vim /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf
input {
beats {
host => "0.0.0.0"
port => "5056"
}
}
filter {
}
output {
elasticsearch {
hosts => "192.168.10.17:9200"
index => "tomcat-catalina-%{+yyyy.MM.dd}"
}
}
运行
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf --path.data /usr/share/logstash/data3 &
验证端口是否启动
ss -anput | grep ":5056"
四、应用tomcat资源清单文件
master主机操作
kubectl apply -f tomcat-logs.yaml
等一会因为需要下载镜像
然后查看pod
注:需要vpn
kubectl get deployment.apps
kubectl get pods
五、验证Pod 中tomcat及filebeat是否正常
查看tomcat产生日志 (-c: container)
查看filebeat收集日志
kubectl logs tomcat-demo-664584f857-k8whd -c filebeat
六、再kiana页面中添加索引
宿主机浏览器访问
192.168.10.17:5601
可以看到已经看到日志了
完成
如果对您有帮助可以点下关注