k8s 容器日志方案-log-pilot(java多行&json格式)

前言:由于log-pilot阿里云停止更新之拨,有些不完善的地方贼穆,只能修改容器模板來支持java多行&json格式數(shù)據(jù)洼畅。我采用log-pilot將日志發(fā)到kafka的方式完成我日志采集糊余。

版本:

? ??????log-pilot??0.9.5

? ? ? ??logstash-6.5.1

? ? ? ? kafak-0.10.2


1、log-pilot介紹

log-Pilot 是一個智能容器日志采集工具涮帘,它不僅能夠高效便捷地將容器日志采集輸出到多種存儲日志后端拼苍,同時還能夠動態(tài)地發(fā)現(xiàn)和采集容器內(nèi)部的日志文件。 針對前面提出的日志采集難題焚辅,Log-Pilot 通過聲明式配置實現(xiàn)強大的容器事件管理,可同時獲取容器標準輸出和內(nèi)部文件日志苟鸯,解決了動態(tài)伸縮問題同蜻,此外,Log-Pilot 具有自動發(fā)現(xiàn)機制早处,CheckPoint 及句柄保持的機制湾蔓,自動日志數(shù)據(jù)打標,有效應(yīng)對動態(tài)配置砌梆、日志重復(fù)和丟失以及日志源標記等問題默责。 目前 log-pilot 在 Github 完全開源,項目地址是 https://github.com/AliyunContainerService/log-pilot 咸包。您可以深入了解更多實現(xiàn)原理桃序。

2、改造 log-pilot容器

? ? 1)下載log-pilot容器

git pull? registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.5-filebeat

? ? 2)修改配置服務(wù)的yaml文件

{{range .configList}}

- type: log

? enabled: true

? paths:

? ? ? - {{ .HostDir }}/{{ .File }}

? scan_frequency: 10s

? fields_under_root: true

? {{range $key, $value := .Tags}} # 看了很久的源代碼烂瘫,發(fā)現(xiàn)改不動媒熊,最后覺得用tags的方式判斷很不錯,

? {{if eq $key "java"}} # 如果是tag的key是java就多行采集 和網(wǎng)上的不一樣

? multiline.pattern: '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' #新增正則條件,以日期開頭? 網(wǎng)上抄的

? multiline.negate: true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #新增 網(wǎng)上抄的

? multiline.match: after? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #新增? 網(wǎng)上抄的

? multiline.max_lines: 10000? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #新增? 網(wǎng)上抄的

? {{end}}

? {{end}}

? {{if .Stdout}}

? docker-json: true

? {{end}}

? {{if eq .Format "json"}}

? json.keys_under_root: true

? {{end}}

? fields:

? ? ? {{range $key, $value := .Tags}}

? ? ? {{ $key }}: {{ $value }}

? ? ? {{end}}

? ? ? {{range $key, $value := $.container}}

? ? ? {{ $key }}: {{ $value }}

? ? ? {{end}}

? tail_files: false

? close_inactive: 2h

? close_eof: false

? close_removed: true

? clean_removed: true

? close_renamed: false

{{end}}

? 3)打包鏡像并推送

????#vim Dockerfile

????FROM registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.5-filebeat

????COPY filebeat.tpl /pilot/filebeat.tpl

? 這里你自己push哈

3芦鳍、安裝log-pilot

---

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

? name: log-pilot

? namespace: kube-system

? labels:

? ? k8s-app: log-pilot

? ? kubernetes.io/cluster-service: "true"

spec:

? template:

? ? metadata:

? ? ? labels:

? ? ? ? k8s-app: log-es

? ? ? ? kubernetes.io/cluster-service: "true"

? ? ? ? version: v1.22

? ? spec:

? ? ? tolerations:

? ? ? - key: node-role.kubernetes.io/master

? ? ? ? effect: NoSchedule

? ? ? serviceAccountName: dashboard-admin

? ? ? containers:

? ? ? - name: log-pilot

? ? ? ? image: registry-vpc.cn-beijing.aliyuncs.com/XXX/log-pilot:0.9.2 #你自己鏡像地址 記得私有倉庫需要認證的

? ? ? ? resources:

? ? ? ? ? limits:

? ? ? ? ? ? memory: 200Mi

? ? ? ? ? requests:

? ? ? ? ? ? cpu: 100m

? ? ? ? ? ? memory: 200Mi

? ? ? ? env:

? ? ? ? ? - name: "LOGGING_OUTPUT"

? ? ? ? ? ? value: "kafka"? ? ? ? #輸出到kafka嚷往,官方的例子是輸出到es

? ? ? ? ? - name: "KAFKA_BROKERS" #和官方不一致的地方

? ? ? ? ? ? value: "XXX:9092,XXX:9092,XXX:9092" #kafka地址

? ? ? ? ? - name: "NODE_NAME"

? ? ? ? ? ? valueFrom:

? ? ? ? ? ? ? fieldRef:

? ? ? ? ? ? ? ? fieldPath: spec.nodeName

? ? ? ? volumeMounts:

? ? ? ? - name: sock

? ? ? ? ? mountPath: /var/run/docker.sock

? ? ? ? - name: root

? ? ? ? ? mountPath: /host

? ? ? ? ? readOnly: true

? ? ? ? - name: varlib

? ? ? ? ? mountPath: /var/lib/filebeat

? ? ? ? - name: varlog

? ? ? ? ? mountPath: /var/log/filebeat

? ? ? ? securityContext:

? ? ? ? ? capabilities:

? ? ? ? ? ? add:

? ? ? ? ? ? - SYS_ADMIN

? ? ? terminationGracePeriodSeconds: 30

? ? ? volumes:

? ? ? - name: sock

? ? ? ? hostPath:

? ? ? ? ? path: /var/run/docker.sock

? ? ? - name: root

? ? ? ? hostPath:

? ? ? ? ? path: /

? ? ? - name: varlib

? ? ? ? hostPath:

? ? ? ? ? path: /var/lib/filebeat

? ? ? ? ? type: DirectoryOrCreate

? ? ? - name: varlog

? ? ? ? hostPath:

? ? ? ? ? path: /var/log/filebeat

? ? ? ? ? type: DirectoryOrCreate


4、配置服務(wù)的yaml文件

---

apiVersion: apps/v1

kind: Deployment

metadata:

? name: microservice-eureka

? namespace: sit

spec:

? selector:

? ? matchLabels:

? ? ? app: springcloud-eureka

? replicas: 1

? template:

? ? metadata:

? ? ? labels:

? ? ? ? app: springcloud-eureka

? ? spec:

? ? ? containers:

? ? ? - name: springcloud-eureka

? ? ? ? image: registry-vpc.cn-beijing.aliyuncs.com/XXXX/microservice-eureka:20200728-d584876 #你自己倉庫地址

? ? ? ? env:

? ? ? ? - name: eureka.instance.hostname

? ? ? ? ? value: springcloud-eureka

? ? ? ? - name: eureka.instance.preferIpAddress

? ? ? ? ? value: "true"

? ? ? ? - name: aliyun_logs_sit-log? ?#當(dāng)然如果你不想使用aliyun這個關(guān)鍵字柠衅,Log-Pilot 也提供了環(huán)境變量 PILOT_LOG_PREFIX可以指定自己的聲明式日志配置前綴皮仁,比如 PILOT_LOG_PREFIX: "aliyun,custom",最好是和官方一致菲宴,省去多余的配置

? ? ? ? ? value: "/src/logs/console.log"?? #需要收集的日志路徑

? ? ? ? - name: aliyun_logs_sit-log_tags

? ? ? ? ? value: "topic=sit-log,java=java"? #kafka topic的名字贷祈,這個定義是關(guān)鍵,不定義這個裙顽,日志是無法輸出到kafka內(nèi)的 我看了源代碼一定要寫 topic key的付燥,java=java 是我們設(shè)置的多行采集的tag

? ? ? ? volumeMounts:

? ? ? ? - mountPath: /src/logs

? ? ? ? ? name: datalog

? ? ? imagePullSecrets:

? ? ? - name: imagehub

? ? ? volumes:

? ? ? - name: datalog

? ? ? ? emptyDir: {}

---

kind: Service

apiVersion: v1

metadata:

? name: springcloud-eureka

? namespace: sit

spec:

? selector:

? ? app: springcloud-eureka

? ports:

? - protocol: TCP

? ? port: 80

? ? targetPort: 8000

? #type: NodePort


5、利用logstash消費kafka內(nèi)的數(shù)據(jù)

input {

? kafka {

? ? bootstrap_servers => ["xxx:9092, xxx :9092, xxx :9092"]

? ? #client_id => "sink"

? ? group_id => "sink"

? ? auto_offset_reset => "latest"

? ? consumer_threads => 3

? ? decorate_events => true

? ? topics => ["sit-log"] # 我們上邊配的 ?topic

? ? codec => "json"

}

}

filter

{

? ? if [java] != "java" {? #判斷是不是字段java愈犹,方便處理json和java多行

? ? ? json { source => "message"}? ? #再進行解析

? ? }?

}

output {

#stdout { codec => rubydebug } # 調(diào)試的時候記得打開

if? [java] == "java" { #通過不同的tag 指向不同的index

? elasticsearch {

? ? hosts => ["http://172.17.187.169:9200"]

? ? index => "sit-micr-%{+YYYY.MM.dd}"

? ? }

}

if [vytype] == "mobile" {

? elasticsearch {

? ? hosts => ["http://172.17.187.169:9200"]

? ? index => "sit-mobile-%{+YYYY.MM.dd}"

? ? }

}

if [vytype] == "nginx" {

? elasticsearch {

? ? hosts => ["http://172.17.187.169:9200"]

? ? index => "sit-nginx-%{+YYYY.MM.dd}"

? ? }

}

}


6键科、最后展示一張kibana收集日志的圖例



7、參考博客

https://www.cnblogs.com/uglyliu/p/12382214.html

https://help.aliyun.com/document_detail/86552.html https://github.com/AliyunContainerService/log-pilot/issues/101 https://www.iyunw.cn/archives/k8s-tong-guo-log-pilot-cai-ji-ying-yong-ri-zhi-ding-zhi-hua-tomcat-duo-xing/


8漩怎、總結(jié)

對于未知的領(lǐng)域不要太害怕勋颖,時間是你本錢,可以慢慢磨勋锤,就怕沒時間饭玲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叁执,隨后出現(xiàn)的幾起案子茄厘,更是在濱河造成了極大的恐慌,老刑警劉巖谈宛,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件次哈,死亡現(xiàn)場離奇詭異,居然都是意外死亡吆录,警方通過查閱死者的電腦和手機窑滞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恢筝,“玉大人哀卫,你說我怎么就攤上這事∏瞬郏” “怎么了此改?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侄柔。 經(jīng)常有香客問我带斑,道長鼓寺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任勋磕,我火速辦了婚禮妈候,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挂滓。我一直安慰自己苦银,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布赶站。 她就那樣靜靜地躺著幔虏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贝椿。 梳的紋絲不亂的頭發(fā)上想括,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音烙博,去河邊找鬼瑟蜈。 笑死,一個胖子當(dāng)著我的面吹牛渣窜,可吹牛的內(nèi)容都是我干的铺根。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼乔宿,長吁一口氣:“原來是場噩夢啊……” “哼位迂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起详瑞,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掂林,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坝橡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泻帮,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年驳庭,在試婚紗的時候發(fā)現(xiàn)自己被綠了刑顺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氯窍。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡饲常,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狼讨,到底是詐尸還是另有隱情贝淤,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布政供,位于F島的核電站播聪,受9級特大地震影響朽基,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜离陶,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一稼虎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧招刨,春花似錦霎俩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谎倔,卻和暖如春柳击,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背片习。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工捌肴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毯侦。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓哭靖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侈离。 傳聞我的和親對象是個殘疾皇子试幽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349