制作filebeat底包鏡像,接入dubbo服務消費者采集日志,并将日志輸出到kafka。
配置 filebeat
[[email protected] ~]cat filebeat-7.14.1-linux-x86_64.tar.gz.sha512
bbc18f796172ab195632b54fea8c340d38f70cf27a98c00eccf701da3a6e022ff8fe9ce0937fa6da9c71ae9b3fba42e6f723ff802739bc660bdab410bac4d15b filebeat-7.14.1-linux-x86_64.tar.gz
[[email protected] ~]# mkdir /data/dockerfile/filebeat
[[email protected] ~]# cd /data/dockerfile/filebeat/
[[email protected] filebeat]# cat docker-entrypoint.sh
#!/bin/bash
ENV=${ENV:-"test"}
PROJ_NAME=${PROJ_NAME:-"no-define"}
MULTILINE=${MULTILINE:-"^\d{2}"}
cat > /etc/filebeat.yaml << EOF
filebeat.inputs:
- type: log
fields_under_root: true
fields:
topic: logm-${PROJ_NAME}
paths:
- /logm/*.log
- /logm/*/*.log
- /logm/*/*/*.log
- /logm/*/*/*/*.log
- /logm/*/*/*/*/*.log
scan_frequency: 120s
max_bytes: 10485760
multiline.pattern: '$MULTILINE'
multiline.negate: true
multiline.match: after
multiline.max_lines: 100
- type: log
fields_under_root: true
fields:
topic: logu-${PROJ_NAME}
paths:
- /logu/*.log
- /logu/*/*.log
- /logu/*/*/*.log
- /logu/*/*/*/*.log
- /logu/*/*/*/*/*.log
- /logu/*/*/*/*/*/*.log
output.kafka:
hosts: ["10.4.7.12:9092"]
topic: k8s-fb-$ENV-%{[topic]}
version: 2.0.0
required_acks: 0
max_message_bytes: 10485760
EOF
set -xe
# If user don't provide any command
# Run filebeat
if [[ "$1" == "" ]]; then
exec filebeat -c /etc/filebeat.yaml
else
# Else allow the user to run arbitrarily commands like bash
exec "$@"
fi
/etc/filebeat.yaml解釋:
指定收集的日志檔案
配置日志輸出至 kafka
準備dockerfile
[[email protected] filebeat]# vi Dockerfile
FROM debian:jessie
ENV FILEBEAT_VERSION=7.14.1 \
FILEBEAT_SHA1=bbc18f796172ab195632b54fea8c340d38f70cf27a98c00eccf701da3a6e022ff8fe9ce0937fa6da9c71ae9b3fba42e6f723ff802739bc660bdab410bac4d15b
RUN set -x && \
apt-get update && \
apt-get install -y wget && \
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${FILEBEAT_VERSION}-linux-x86_64.tar.gz -O /opt/filebeat.tar.gz && \
cd /opt && \
echo "${FILEBEAT_SHA1} filebeat.tar.gz" | sha512sum -c - && \
tar xzvf filebeat.tar.gz && \
cd filebeat-* && \
cp filebeat /bin && \
cd /opt && \
rm -rf filebeat* && \
apt-get purge -y wget && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
[[email protected] filebeat]# docker build . -t harbor.od.com/infra/filebeat:v7.14.1
[[email protected] filebeat]# docker push harbor.od.com/infra/filebeat:v7.14.1
準備資源清單
[[email protected] filebeat]# vi /data/k8s-yaml/test/dubbo-demo-consumer/fbdp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: dubbo-demo-consumer
namespace: test
labels:
name: dubbo-demo-consumer
spec:
replicas: 1
selector:
matchLabels:
name: dubbo-demo-consumer
template:
metadata:
labels:
app: dubbo-demo-consumer
name: dubbo-demo-consumer
spec:
containers:
- name: dubbo-demo-consumer
image: harbor.od.com/app/dubbo-demo-web:tomcat_210831_2200
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
env:
- name: C_OPTS
value: -Denv=fat -Dapollo.meta=http://apollo-configservice:8080
volumeMounts:
- mountPath: /opt/tomcat/logs
name: logm
- name: filebeat
image: harbor.od.com/infra/filebeat:v7.14.1
imagePullPolicy: IfNotPresent
env:
- name: ENV
value: test
- name: PROJ_NAME
value: dubbo-demo-web
volumeMounts:
- mountPath: /logm
name: logm
volumes:
- emptyDir: {}
name: logm
imagePullSecrets:
- name: harbor
restartPolicy: Always
terminationGracePeriodSeconds: 30
securityContext:
runAsUser: 0
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600
fbdp.yaml檔案解釋: spec-containers下有兩個容器,邊車模式(sidecar)運作在同一pod中
應用資源清單
kubectl apply -f http://k8s-yaml.od.com/test/dubbo-demo-consumer/fbdp.yaml
kubectl get pods -n test
檢視filebeat日志
[[email protected] ~]# docker ps -a | grep filebeat
25e8b0643685 71a4a9362bbe "/docker-entrypoint.…" 7 minutes ago Up 7 minutes k8s_filebeat_dubbo-demo-consumer-dddc598b-bf6bx_test_35326fe2-59a1-45cc-b6f4-089d65d2ed63_0
此時重新整理demo-test網頁,可以看到通路日志,如下
[[email protected] ~]# docker exec -it 25e8b0643685 bash
[email protected]:/# ls
bin boot data dev docker-entrypoint.sh etc home lib lib64 logm logs media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# cd logm/
[email protected]:/logm# ls
catalina.2021-09-02.log localhost.2021-09-02.log localhost_access_log.2021-09-02.txt stdout.log
[email protected]:/logm# tailf stdout.log
2021-09-02 22:27:19 HelloAction接收到請求:devops
2021-09-02 22:27:19 HelloService傳回到結果:2021-09-02 22:27:19 <h1>這是Dubbo 消費者端(Tomcat服務) 版本更新2.0</h1>hello devops
2021-09-02 22:27:19 HelloAction接收到請求:devops
2021-09-02 22:27:19 HelloService傳回到結果:2021-09-02 22:27:19 <h1>這是Dubbo 消費者端(Tomcat服務) 版本更新2.0</h1>hello devops
2021-09-02 22:27:19 HelloAction接收到請求:devops
檢視Kafka中Topic
驗證filebeat輸出到kafka
[[email protected] kafka]# bin/kafka-topics.sh --list --zookeeper 10.4.7.11:2181
k8s-fb-test-logm-dubbo-demo-web