在小規(guī)模日志場(chǎng)景下,首選DaemonSet+Elastic Agent方案采集pod日志,我們只需要調(diào)整集成策略的采集日志路徑和ingest pipeline管道處理規(guī)則即可,集群性能瓶頸取決于ingest節(jié)點(diǎn)性能。
在大規(guī)模日志場(chǎng)景下,推薦使用sidecar+fluentd方案,由fluentd實(shí)現(xiàn)日志的采集與過(guò)濾處理后直接寫(xiě)入ES集群,集群性能瓶頸取決于es集群hot節(jié)點(diǎn)性能。
在超大規(guī)模且業(yè)務(wù)存在瞬間高峰的日志場(chǎng)景下,推薦使用sidecar+filebeat+kafka+logstash方案。可將日志內(nèi)容暫存到kafka消息隊(duì)列中,由logstash集群逐個(gè)消費(fèi)并寫(xiě)入ES,防止瞬間高峰導(dǎo)致直接寫(xiě)入ES失敗,集群性能瓶頸取決于logstash節(jié)點(diǎn)性能。
應(yīng)用日志應(yīng)配置日志輪換以防止日志文件無(wú)限增長(zhǎng)并占用過(guò)多的磁盤(pán)空間。通過(guò)設(shè)置日志輪換參數(shù),可以控制日志文件的大小、保留的日志文件數(shù)量以及輪換的頻率。這種做法可以高效管理日志,避免磁盤(pán)空間問(wèn)題。
代碼倉(cāng)庫(kù)地址:https://gitee.com/cuiliang0302/log_demo
模擬常見(jiàn)的后端服務(wù)日志,格式如下
2023-07-23 09:35:18.987 | INFO | __main__:debug_log:49 - {'access_status': 200, 'request_method': 'GET', 'request_uri': '/account/', 'request_length': 67, 'remote_address': '186.196.110.240', 'server_name': 'cu-36.cn', 'time_start': '2023-07-23T09:35:18.879+08:00', 'time_finish': '2023-07-23T09:35:19.638+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36'}2023-07-23 09:35:19.728 | WARNING | __main__:debug_log:47 - {'access_status': 403, 'request_method': 'PUT', 'request_uri': '/public/', 'request_length': 72, 'remote_address': '158.113.125.213', 'server_name': 'cu-35.cn', 'time_start': '2023-07-23T09:35:18.948+08:00', 'time_finish': '2023-07-23T09:35:20.343+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36'}2023-07-23 09:35:19.793 | INFO | __main__:debug_log:49 - {'access_status': 200, 'request_method': 'GET', 'request_uri': '/public/', 'request_length': 46, 'remote_address': '153.83.121.71', 'server_name': 'cm-17.cn', 'time_start': '2023-07-23T09:35:19.318+08:00', 'time_finish': '2023-07-23T09:35:20.563+08:00', 'http_user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko/20100101 Firefox/57.0'}2023-07-23 09:35:20.614 | ERROR | __main__:debug_log:45 - {'access_status': 502, 'request_method': 'GET', 'request_uri': '/public/', 'request_length': 62, 'remote_address': '130.190.246.56', 'server_name': 'cu-34.cn', 'time_start': '2023-07-23T09:35:20.061+08:00', 'time_finish': '2023-07-23T09:35:21.541+08:00', 'http_user_agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)'}
[root@es-master ~]# cd /opt/[root@es-master opt]# git clone https://gitee.com/cuiliang0302/log_demo.git[root@es-master opt]# cd log_demo/[root@es-master log_demo]# lsDockerfile log.py main.py readme.md requirements.txt[root@es-master log_demo]# docker build -t harbor.local.com/app/log_demo:1.0 .[root@es-master log_demo]# docker push harbor.local.com/app/log_demo:1.0
在本案例中,我們將容器日志目錄通過(guò)hostPath方式掛載到宿主機(jī)的/var/log/logDemo路徑下。
[root@tiaoban fleet]# cat log-demo.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: log-demospec: replicas: 2 selector: matchLabels: app: log-demo template: metadata: labels: app: log-demo spec: containers: - name: log-demo image: harbor.local.com/app/log_demo:1.0 resources: requests: memory: "32Mi" cpu: "100m" limits: memory: "128Mi" cpu: "500m" volumeMounts: - mountPath: /opt/logDemo/log name: logs volumes: - name: logs hostPath: path: /var/log/logDemo type: DirectoryOrCreate[root@tiaoban fleet]# kubectl apply -f log-demo.yaml deployment.apps/log-demo created[root@tiaoban fleet]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESlog-demo-76c57cf9dc-9znrd 1/1 Running 0 2m45s 10.244.3.124 work3 <none> <none>log-demo-76c57cf9dc-lkvrq 1/1 Running 0 2m45s 10.244.4.158 work2 <none> <none>
日志路徑填寫(xiě)掛載到Elastic agent的日志路徑,即/var/log/logDemo/info.log,代理策略選擇現(xiàn)有的Elastic Agent on ECK policy。
圖片
在先前的自定義日志采集(fleet方式)中已有詳細(xì)講解,具體內(nèi)容可參考文檔https://www.cuiliangblog.cn/detail/article/62,此處不再贅述。
通常情況下我們需要采集多個(gè)自定義應(yīng)用的日志內(nèi)容,我們只需要保證應(yīng)用日志目錄均掛載至宿主機(jī)/var/log目錄下,然后配置fleet代理策略,指定對(duì)應(yīng)的日志路徑和名稱(chēng)以及ingest pipeline即可。
圖片
如下所示,我們需要采集myapp和springboot兩個(gè)應(yīng)用的日志,只需要添加多條Custom logs集成策略即可。
圖片
博客地址:https://www.cuiliangblog.cn/
本文鏈接:http://www.tebozhan.com/showinfo-26-14621-0.htmlELK Stack生產(chǎn)實(shí)踐——pod日志采集(Elastic Agent方案)
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com