ELK
K8s容器日志實(shí)時(shí)收集FileBeat+ES+Kibana
k8s日志收集第一種方式
k8s日志收集第二種方式
環(huán)境說(shuō)明
IP地址服務(wù)主機(jī)名
10.4.82.119docker、k8s_master|node勒叠、master
10.4.82.120docker、 k8s_node、kibananode
10.4.82.115es幕垦、Harbor鏡像倉(cāng)庫(kù)先改、docker (主要作用就是打一個(gè)filebeat鏡像)i4t
提示:filebeat跑在k8s容器內(nèi)部仇奶,所以沒(méi)有單獨(dú)創(chuàng)建服務(wù)
一岛抄、FileBeat
作為 Beats 家族的一員夫椭,F(xiàn)ilebeat 是一個(gè)輕量級(jí)的日志傳輸工具蹭秋,它的存在正彌補(bǔ)了 Logstash 的缺點(diǎn):Filebeat 作為一個(gè)輕量級(jí)的日志傳輸工具可以將日志推送到中心 Logstash。
在版本 5.x 中洞豁,Elasticsearch 具有解析的能力(像 Logstash 過(guò)濾器)— Ingest族跛。這也就意味著可以將數(shù)據(jù)直接用 Filebeat 推送到 Elasticsearch礁哄,并讓 Elasticsearch 既做解析的事情,又做存儲(chǔ)的事情茉继。也不需要使用緩沖烁竭,因?yàn)?Filebeat 也會(huì)和 Logstash 一樣記住上次讀取的偏移:
如果需要緩沖(例如,不希望將日志服務(wù)器的文件系統(tǒng)填滿)终吼,可以使用 Redis/Kafka际跪,因?yàn)?Filebeat 可以與它們進(jìn)行通信:
Filebeat 優(yōu)點(diǎn)
Filebeat 只是一個(gè)二進(jìn)制文件沒(méi)有任何依賴。它占用資源極少歇盼,盡管它還十分年輕豹缀,正式因?yàn)樗?jiǎn)單邢笙,所以幾乎沒(méi)有什么可以出錯(cuò)的地方,所以它的可靠性還是很高的想暗。它也為我們提供了很多可以調(diào)節(jié)的點(diǎn)杨箭,例如:它以何種方式搜索新的文件互婿,以及當(dāng)文件有一段時(shí)間沒(méi)有發(fā)生變化時(shí),何時(shí)選擇關(guān)閉文件句柄驮配。
Filebeat 缺點(diǎn)
Filebeat 的應(yīng)用范圍十分有限僧凤,所以在某些場(chǎng)景下我們會(huì)碰到問(wèn)題旋膳。例如,如果使用 Logstash 作為下游管道尸变,我們同樣會(huì)遇到性能問(wèn)題。正因?yàn)槿绱俗喾颍現(xiàn)ilebeat 的范圍在擴(kuò)大酗昼。開(kāi)始時(shí),它只能將日志發(fā)送到 Logstash 和 Elasticsearch春弥,而現(xiàn)在它可以將日志發(fā)送給 Kafka 和 Redis扫责,在 5.x 版本中公给,它還具備過(guò)濾的能力淌铐。
典型應(yīng)用場(chǎng)景
Filebeat 在解決某些特定的問(wèn)題時(shí):日志存于文件,我們希望
① 將日志直接傳輸存儲(chǔ)到 Elasticsearch吐葱。這僅在我們只是抓去(grep)它們或者日志是存于 JSON 格式(Filebeat 可以解析 JSON)弟跑∶霞或者如果打算使用 Elasticsearch 的 Ingest 功能對(duì)日志進(jìn)行解析和豐富炭玫。
② 將日志發(fā)送到 Kafka/Redis吞加。所以另外一個(gè)傳輸工具(例如,Logstash 或自定義的 Kafka 消費(fèi)者)可以進(jìn)一步豐富和轉(zhuǎn)發(fā)巫财。這里假設(shè)選擇的下游傳輸工具能夠滿足我們對(duì)功能和性能的要求平项。
1.1 FileBeat工作原理
Filebeat是本地文件的日志數(shù)據(jù)采集器。作為服務(wù)器上的代理安裝扣讼,F(xiàn)ilebeat監(jiān)視日志目錄或特定的日志文件tail -f file并將它們轉(zhuǎn)發(fā)給ES椭符、Logstash、Kafka等
Filebeat由二個(gè)主要組件組成:prospector和havvester這些組件一起工作讀取文件并將時(shí)間數(shù)據(jù)發(fā)送到指定的輸出
啟動(dòng)Filebeat時(shí)蒸健,它會(huì)啟動(dòng)一個(gè)或多個(gè)查找器似忧,查看您的日志文件指定的本地路徑。對(duì)**prospector**所在的每個(gè)日志文件饺著,prospector啟動(dòng)harvester瓶籽。每個(gè)harvester都會(huì)為新內(nèi)容讀取單個(gè)日志文件塑顺,并將新日志數(shù)據(jù)發(fā)送到libbeat严拒,后者將聚合事件合并聚合數(shù)據(jù)發(fā)送到Filebeat配置的輸出
harvester
負(fù)載讀取單個(gè)文化的內(nèi)容。讀取每個(gè)文件种蘸,并將內(nèi)容發(fā)送到the output。每個(gè)文件啟動(dòng)一個(gè)harvester刊侯,負(fù)責(zé)打開(kāi)和關(guān)閉文件,這意味著在運(yùn)行時(shí)文件描述符保持打開(kāi)狀態(tài)
如果文件在讀取時(shí)被刪除或重命名亭饵,F(xiàn)ilebeat將繼續(xù)讀取文件冬骚。在harvester關(guān)閉之前,磁盤(pán)上的空間被保留喜德。默認(rèn)情況下航棱,F(xiàn)ilebeat將文件保持打開(kāi)狀態(tài),直到達(dá)到close_inactive狀態(tài)
關(guān)閉harvester會(huì)產(chǎn)生以下結(jié)果
1.如果在harvester仍在讀取文件時(shí)文件被刪除朴艰,則關(guān)閉文件句柄祠墅,釋放底層資源。
2.文件的采集只會(huì)在scan_frequency過(guò)后重新開(kāi)始
3.如果在harvester關(guān)閉的情況下移動(dòng)文件狗准,則不會(huì)繼續(xù)處理文件
prospector
負(fù)責(zé)管理harvester并找到所有要讀取的文件來(lái)源驶俊。
如果輸入類(lèi)型為日志,則查找器將查找路徑匹配的所有文件故俐,并為每個(gè)文件啟動(dòng)一個(gè)harvester。每個(gè)prospector都在自己的Go斜程中運(yùn)行
以下示例將Filebeat配置為從與指定的匹配的所有日志文件中收集行:
filebeat.prospectors:
- type: log
? paths:
? ? - /data/log/*.log
? ? - /data/log4j/*.log
Filebeat目前支持兩種prospector類(lèi)型:log和stdin
每個(gè)prospector類(lèi)型可以定義多次
日志prospector檢查每個(gè)文件以查看harvester是否需要啟動(dòng)槽片,是否已經(jīng)運(yùn)行
只有在harvest關(guān)閉后文件大小發(fā)生了變化,才會(huì)讀到新行
注:Filebeat prospector只能讀取本地文件剩盒,沒(méi)有功能可以連接到遠(yuǎn)程主機(jī)來(lái)讀取存儲(chǔ)的日志或文件
Filebeat 保持文件狀態(tài)
Filebeat 保存每個(gè)文件的狀態(tài)并經(jīng)常講狀態(tài)刷新到磁盤(pán)上的注冊(cè)中心中辽聊。該狀態(tài)用于記錄harvest正在讀取的最后偏移量纪挎,并確保發(fā)送所有日志行。
如果輸出(例如ES或Logstash)無(wú)法訪問(wèn)跟匆,F(xiàn)ilebeat會(huì)跟蹤最后發(fā)送的行异袄,并在輸出再次可用時(shí)繼續(xù)讀取文件。
在Filebeat運(yùn)行時(shí)玛臂,每個(gè)prospector內(nèi)存中也會(huì)保存文件狀態(tài)信息隙轻。由于文件可以被重命名活移動(dòng)叁巨,因?yàn)槲募吐窂讲蛔阋鬃R(shí)別文件庶橱。對(duì)每個(gè)文件枫绅,F(xiàn)ilebeat存儲(chǔ)唯一標(biāo)示符以檢測(cè)文件是否先前已經(jīng)采集過(guò)
Filebeat如何確保至少一次交付
Filebeat保證事件至少會(huì)被傳送到配置的輸出一次,并且不會(huì)丟失數(shù)據(jù)。Filebeat能夠?qū)崿F(xiàn)此行為神郊,因?yàn)樗鼘⒚總€(gè)事件的傳遞狀態(tài)存儲(chǔ)在注冊(cè)文件中宛乃。在輸出阻塞或未確認(rèn)所有事件的情況下眼坏,F(xiàn)ilebeat將繼續(xù)嘗試發(fā)送事件沿侈,直到接收端確認(rèn)已收到。
如果Filebeat在發(fā)送事件的過(guò)程中關(guān)閉,它不會(huì)等待輸出確認(rèn)所有收到事件绘迁。發(fā)送到輸出但在Filebeat關(guān)閉前未確認(rèn)的任何事在重新啟動(dòng)Filebeat時(shí)會(huì)再次發(fā)送鼎俘。這可以確保每個(gè)事件至少發(fā)送一次,但最終會(huì)重復(fù)事件發(fā)送到輸出秘案。也可以通過(guò)設(shè)置shutdown_timeout選項(xiàng)來(lái)配置Filebeat以在關(guān)閉之前等待特定事件
注:
Filebeat的至少一次交付保證包括日志輪換和刪除舊文件的限制吼旧。如果將日志文件寫(xiě)入磁盤(pán)并且寫(xiě)入速度超過(guò)Filebeat可以處理的速度勇哗,或者在輸出不可用時(shí)刪除了文件,則可能會(huì)丟數(shù)據(jù)。在Linux,F(xiàn)ilebeat也可能因?yàn)閕node重用而跳過(guò)行
本段參考:http://www.reibang.com/p/6282b04fe06a
二是偷、環(huán)境配置
Docker安裝
wget http://down.abcdocker.com/docker/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
wget http://down.abcdocker.com/docker/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
yum 安裝
yum install docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm -y
yum install docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm -y
systemctl enable docker
systemctl start docker
sed -i '/ExecStart=\/usr\/bin\/dockerd/i\ExecStartPost=\/sbin/iptables -I FORWARD -s 0.0.0.0\/0 -d 0.0.0.0\/0 -j ACCEPT' /usr/lib/systemd/system/docker.service
sed -i '/dockerd/s/$/ \-\-storage\-driver\=overlay2/g' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
#設(shè)置存儲(chǔ)引擎和防火墻
2.1 Tomcat鏡像制作
我們這里以Tomcat項(xiàng)目為基礎(chǔ)進(jìn)行測(cè)試
Docker文件內(nèi)容如下
#這里需要把a(bǔ)pache和jdk下載到本地,需要和Dockerfile在同一目錄
wget http://down.abcdocker.com/docker/jdk1.8.0_66.tar.gz
wget http://down.abcdocker.com/docker/apache-tomcat-8.5.39.tar.gz
[root@i4t tomcat_test]# cat Dockerfile
# docker pull centos
###############################################################################
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INSTALLATION
###############################################################################
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? www.i4t.com
##############################################################################
#? ? ? ? ? ? .o.? ? ? ? .o8? ? ? ? ? ? ? ? ? ? ? .o8? ? ? ? ? ? ? ? ? ? ? oooo
#? ? ? ? ? .888.? ? ? "888? ? ? ? ? ? ? ? ? ? ? "888? ? ? ? ? ? ? ? ? ? ? `888
#? ? ? ? ? .8"888.? ? ? 888oooo.? .ooooo.? .oooo888? .ooooo.? .ooooo.? 888? oooo? .ooooo.? oooo d8b
#? ? ? ? .8' `888.? ? d88' `88b d88' `"Y8 d88' `888? d88' `88b d88' `"Y8? 888 .8P'? d88' `88b `888""8P
#? ? ? ? .88ooo8888.? ? 888? 888 888? ? ? 888? 888? 888? 888 888? ? ? ? 888888.? ? 888ooo888? 888
#? ? ? .8'? ? `888.? 888? 888 888? .o8 888? 888? 888? 888 888? .o8? 888 `88b.? 888? ? .o? 888
#? ? ? o88o? ? o8888o? `Y8bod8P' `Y8bod8P' `Y8bod88P" `Y8bod8P' `Y8bod8P' o888o o888o `Y8bod8P' d888b
#
#
#? ? ? ? ? ? ? ? ? ? ? ? ****? ? ? ? ****
#? ? ? ? ? ? ? ? ? ? ? ***? ***? ? ? **? ***
#? ? ? ? ? ? ? ? ? ? ? *? ? ? *? ? **? ? *
#
#? ? ? ? ? ? ? ? ? ? ? ? ? ? **? ? **
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ***? **
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ****
#####################################################################################
FROM centos
MAINTAINER www.i4t.com "cyh@i4t.com"
WORKDIR /tmp
## Please see https://i4t.com/3552.html? install JDK
COPY jdk1.8.0_66.tar.gz /tmp
? ? RUN tar zxf /tmp/jdk1.8.0_66.tar.gz -C /usr/local/ && rm -rf /tmp/jdk1.8.0_66.tar.gz
? ? RUN ln -s /usr/local/jdk1.8.0_66 /usr/local/jdk
#/etc/profile
? ? ENV JAVA_HOME /usr/local/jdk
? ? ENV CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
? ? ENV PATH $PATH:$JAVA_HOME/bin
# add apache
# Please see i4t.com && baidu.com
? ? COPY apache-tomcat-8.5.39.tar.gz /tmp
? ? RUN tar zxf apache-tomcat-8.5.39.tar.gz -C /usr/local? && rm -rf /tmp/apache-tomcat-8.5.39.zip
? ? RUN mv /usr/local/apache-tomcat-8.5.39 /usr/local/tomcat
#port
? ? EXPOSE 8080
###############################################################################
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? START
###############################################################################
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
構(gòu)建tomcat鏡像
[root@i4t ~]# docker build -t i4t.com/tomcat/tomcat.v1 /data/tomcat_test/
Sending build context to Docker daemon 205.6 MB
Step 1/14 : FROM centos
---> 9f38484d220f
Step 2/14 : MAINTAINER www.i4t.com "cyh@i4t.com"
---> Using cache
---> 4a7c687c3bf7
Step 3/14 : WORKDIR /tmp
---> Using cache
---> 4bc766547f5c
Step 4/14 : COPY jdk1.8.0_66.tar.gz /tmp
---> Using cache
---> 2fd3ec55a068
Step 5/14 : RUN tar zxf /tmp/jdk1.8.0_66.tar.gz -C /usr/local/ && rm -rf /tmp/jdk1.8.0_66.tar.gz
---> Using cache
---> 3cb37cce7028
Step 6/14 : RUN ln -s /usr/local/jdk1.8.0_66 /usr/local/jdk
---> Using cache
---> 790555e157f7
Step 7/14 : ENV JAVA_HOME /usr/local/jdk
---> Using cache
---> 9a0bcf883c98
Step 8/14 : ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Using cache
---> 9d4f614f7979
Step 9/14 : ENV PATH $PATH:$JAVA_HOME/bin
---> Using cache
---> b99a4730d3ea
Step 10/14 : COPY apache-tomcat-8.5.39.tar.gz /tmp
---> Using cache
---> 73a8408bc879
Step 11/14 : RUN tar zxf apache-tomcat-8.5.39.tar.gz -C /usr/local? && rm -rf /tmp/apache-tomcat-8.5.39.zip
---> Using cache
---> 34d63da07d30
Step 12/14 : RUN mv /usr/local/apache-tomcat-8.5.39 /usr/local/tomcat
---> Using cache
---> 7dae5cb15207
Step 13/14 : EXPOSE 8080
---> Using cache
---> 8ec8c8470149
Step 14/14 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
---> Using cache
---> 0eac795556fb
Successfully built 0eac795556fb
#更改鏡像名稱
docker tag [原鏡像]? [新鏡像]
例子:docker tag i4t.com/tomcat/tomcatv1? i4t.com/tomcat/i4tv1
鏡像打包完成后,我們?cè)赿ocker容器手動(dòng)啟動(dòng)鏡像進(jìn)行測(cè)試
[root@i4t tomcat]# docker run -idt --name i4t_tomcat_test -p 80:8080 i4t.com/tomcat/tomcat.v1
f6f1621d9464ea2d17a4611393b1950e36f5b7b6c9234f322d636d47fee94e10
#run 運(yùn)行容器
-it 進(jìn)入容器
-d? 后臺(tái)運(yùn)行
--name 新容器名稱
-p 映射端口
i4t.com/tomcat/tomcat.v1 鏡像名稱
在Docker本機(jī)使用curl命令驗(yàn)證服務(wù)是否正常運(yùn)行 (主要是判斷docker build是否有問(wèn)題)
容器正常啟動(dòng)訪問(wèn)說(shuō)明我們tomcat鏡像是沒(méi)有問(wèn)題
當(dāng)我們鏡像打包完成docker啟動(dòng)正常之后犀斋,直接push到Harbor鏡像倉(cāng)庫(kù)即可
docker push i4t.com/tomcat/i4tv1
下面是harbor搭建文檔
這里稍微說(shuō)明一點(diǎn)辆脸,如果是線上環(huán)境辨绊,需要替換war包操作。可以將上面制作的tomcat鏡像為基礎(chǔ)鏡像,在寫(xiě)一個(gè)dockerfile。我這里提供一下
#這里不是重點(diǎn)念颈,我不詳細(xì)說(shuō)躏嚎。步驟放在這
# cat dockerfile
FROM i4t.com/tomcat/tomcat.v1
MAINTAINER abcdocker "i4t.com"
COPY ROOT.tgz /data/
RUN tar zxf /data/ROOT.tgz -C /usr/local/tomcat/webapps/ && rm -rf /data/ROOT.tgz
# docker build -t tomcat_video:v1
# docker tag tomcat_video:v1 i4t.com/tomcat_video:v1
# docker push i4t.com/tomcat_video:v1
2.2 Filebeat 制作鏡像
我們這里講的是使用Filebeat來(lái)收集日志,ELK安裝具體可以參考
tomcat服務(wù)已經(jīng)可以正常運(yùn)行荆陆,現(xiàn)在我們部署filebeat鏡像
[root@i4t filebeat]# docker build -t tomcat_filebeat:v2 /data/filebeat/
Sending build context to Docker daemon 50.63 MB
Step 1/9 : FROM docker.io/centos
---> 9f38484d220f
Step 2/9 : MAINTAINER www.i4t.com <cyh@i4t.com>
---> Using cache
---> bbc4c3a8b392
Step 3/9 : WORKDIR /usr/local
---> Using cache
---> 7af655ce0f61
Step 4/9 : ENV FILEBEAT_VERSION 6.7.0
---> Using cache
---> 227c02e65a80
Step 5/9 : RUN set -x? ? ? && curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${FILEBEAT_VERSION}-linux-x86_64.tar.gz? ? ? && tar xf filebeat-${FILEBEAT_VERSION}-linux-x86_64.tar.gz -C /usr/local? ? ? && ln -s /usr/local/filebeat-${FILEBEAT_VERSION}-linux-x86_64 /usr/local/filebeat? ? ? && chmod +x /usr/local/filebeat/filebeat? ? ? ? && mkdir -p /etc/filebeat
---> Running in 6d86756e5c4a
+ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.0-linux-x86_64.tar.gz
? % Total? ? % Received % Xferd? Average Speed? Time? ? Time? ? Time? Current
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Dload? Upload? Total? Spent? ? Left? Speed
100 11.1M? 100 11.1M? ? 0? ? 0? 382k? ? ? 0? 0:00:29? 0:00:29 --:--:-- 1149k
+ tar xf filebeat-6.7.0-linux-x86_64.tar.gz -C /usr/local
+ ln -s /usr/local/filebeat-6.7.0-linux-x86_64 /usr/local/filebeat
+ chmod +x /usr/local/filebeat/filebeat
+ mkdir -p /etc/filebeat
---> 8920fb78ff5d
Removing intermediate container 6d86756e5c4a
Step 6/9 : ADD ./docker-entrypoint.sh /usr/bin/
---> d2989df722b1
Removing intermediate container dbe668e7cd75
Step 7/9 : RUN chmod +x /usr/bin/docker-entrypoint.sh
---> Running in eb7c7304647a
---> 5ea2cb81cad6
Removing intermediate container eb7c7304647a
Step 8/9 : ENTRYPOINT docker-entrypoint.sh
---> Running in bed03d3aa8e3
---> cb9d8de0d329
Removing intermediate container bed03d3aa8e3
Step 9/9 : CMD /usr/local/filebeat/filebeat -e -c /etc/filebeat/filebeat.yml
---> Running in 253dcfbc0ff7
---> f26910a9c61d
Removing intermediate container 253dcfbc0ff7
Successfully built f26910a9c61d
Filebeat Dockerfile內(nèi)容
[root@i4t filebeat]# cat Dockerfile
###############################################################################
#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INSTALLATION
###############################################################################
FROM? docker.io/centos
MAINTAINER www.i4t.com <cyh@i4t.com>
# Install Filebeat
WORKDIR /usr/local
ENV FILEBEAT_VERSION=5.4.0
RUN set -x \
? ? ? && curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-${FILEBEAT_VERSION}-linux-x86_64.tar.gz \
? ? ? && tar xf filebeat-${FILEBEAT_VERSION}-linux-x86_64.tar.gz -C /usr/local \
? ? ? && ln -s /usr/local/filebeat-${FILEBEAT_VERSION}-linux-x86_64 /usr/local/filebeat \
? ? ? && chmod +x /usr/local/filebeat/filebeat? \
? ? ? && mkdir -p /etc/filebeat
ADD ./docker-entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/usr/local/filebeat/filebeat","-e","-c","/etc/filebeat/filebeat.yml"]
######### 腳本內(nèi)容
[root@i4t filebeat]# cat docker-entrypoint.sh
#!/bin/bash
config=/etc/filebeat/filebeat.yml
env
echo 'Filebeat init process done. Ready for start up.'
echo "Using the following configuration:"
cat /etc/filebeat/filebeat.yml
exec "$@"
## Dockerfile和腳本在同一個(gè)目錄下碍讯,然后進(jìn)行build
打包完成后我們push到harbor倉(cāng)庫(kù),和tomcat鏡像一樣的操作
[root@i4t tmp]# docker tag tomcat_filebeat:v2? i4t.com/filebeat/v1
[root@i4t tmp]# docker push i4t.com/filebeat/v1:latest
The push refers to a repository [i4t.com/filebeat/v1]
de0545fc627a: Pushed
8bd9a1a2863c: Pushed
f01cc0f2d07b: Pushed
d69483a6face: Pushed
latest: digest: sha256:03a8f15e28d012eb19aeb29b4920f7ab5df5365054896fa40f83a97aa1cb55cf size: 1155
2.3 Elasticsearch安裝
1.JDK環(huán)境安裝
2.Elasticsearch安裝
這里不寫(xiě)了,博客有很多了
服務(wù)正常啟動(dòng)即可(我們這里只需要安裝es和es-head插件即可潮罪,logstash在另外一臺(tái))
2.4 kibana安裝
只要服務(wù)正常啟動(dòng)康谆,沒(méi)有報(bào)錯(cuò)即可
2.5 測(cè)試鏡像
這里我們使用k8s環(huán)境進(jìn)行測(cè)試,沒(méi)有搭建k8s可以參考[k8s 1.11源碼安裝]
tomcat.yaml
[root@yzsjhl82-119 tomcat_test]# cat tomcat_test.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
? name: tomcat-abcdocker
? namespace: default
spec:
? replicas: 1
? template:
? ? metadata:
? ? ? labels:
? ? ? ? k8s-app: tomcat-web
? ? spec:
? ? ? containers:
? ? ? - image: 鏡像地址/filebeat/v2
? ? ? ? imagePullPolicy: Always
? ? ? ? name: filebeat
? ? ? ? volumeMounts:
? ? ? ? - name: app-logs
? ? ? ? ? mountPath: /logs
? ? ? ? - name: filebeat-config
? ? ? ? ? mountPath: /etc/filebeat/
? ? ? - image: 鏡像地址/filebeat/tomcat.v1:latest
? ? ? ? name : tomcat-web
? ? ? ? imagePullPolicy: Always
? ? ? ? ports:
? ? ? ? - containerPort: 8080
? ? ? ? volumeMounts:
? ? ? ? - name: app-logs
? ? ? ? ? mountPath: /usr/local/tomcat/logs
? ? ? volumes:
? ? ? - name: app-logs
? ? ? ? emptyDir: {}
? ? ? - name: filebeat-config
? ? ? ? configMap:
? ? ? ? ? name: filebeat-config
tomcat_server.xml (端口暴露)
[root@master tomcat_test]# cat tomcat_server.yaml
apiVersion: v1
kind: Service
metadata:
? name: tomcat-web
? labels:
? ? k8s-app: tomcat-web
spec:
? type: NodePort
? ports:
? - port: 8080
? ? protocol: TCP
? ? targetPort: 8080
? ? name: http
? ? nodePort: 30001
? selector:
? ? k8s-app: tomcat-web
configmap.xml
通過(guò)configmap的形式創(chuàng)建filebeat.yml配置文件错洁,指定收集日志的路徑秉宿、elasticsearch的配置信息及索引名稱
[root@master tomcat_test]# cat tomcat_configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
? name: filebeat-config
data:
? filebeat.yml: |
? ? filebeat.prospectors:
? ? - input_type: log
? ? ? paths:
? ? ? ? - "/logs/*"
? ? output.elasticsearch:
? ? ? hosts: ["10.4.82.115:9200"]
? ? ? index: "filebeat-tomcat-log"
# hosts指定es地址
# index 索引名稱
創(chuàng)建索引
[root@master tomcat_test]# kubectl create -f tomcat_configmap.yaml
configmap/filebeat-config created
[root@master tomcat_test]# kubectl create -f tomcat_test.yaml
deployment.extensions/tomcat-abcdocker created
[root@master tomcat_test]# kubectl create -f tomcat_server.yaml
service/tomcat-web created
2.6 服務(wù)檢查
我們需要檢查以下
1.檢查pod是否運(yùn)行正常
2.檢查server是否正常
3.檢查configmap是否創(chuàng)建完成
4.kubectl常用命令? https://k.i4t.com/15356201695268.html
查看服務(wù)整個(gè)狀態(tài)是否正常
[root@master tomcat_test]# kubectl get svc,pod,configmap
NAME? ? ? ? ? ? ? ? ? ? TYPE? ? ? ? CLUSTER-IP? ? ? EXTERNAL-IP? PORT(S)? ? ? ? ? AGE
service/kubernetes? ? ? ClusterIP? 10.254.0.1? ? ? <none>? ? ? ? 443/TCP? ? ? ? ? 97d
service/nginx-service? NodePort? ? 10.254.167.71? ? <none>? ? ? ? 80:31000/TCP? ? 97d
service/tomcat-web? ? ? NodePort? ? 10.254.237.208? <none>? ? ? ? 8080:30001/TCP? 3m
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? ? STATUS? ? RESTARTS? AGE
pod/tomcat-abcdocker-56f9547997-2zz7c? 2/2? ? ? Running? 0? ? ? ? ? 3m
NAME? ? ? ? ? ? ? ? ? ? ? ? DATA? ? ? AGE
configmap/filebeat-config? 1? ? ? ? 3m
查看pod容器是否異常
1.查看tomcat鏡像日志
kubectl logs tomcat-abcdocker-56f9547997-2zz7c filebeat
#這里的pod名稱可能不是這個(gè)
2.查看filebeat鏡像日志
kubectl logs tomcat-abcdocker-56f9547997-2zz7c tomcat-web
Kubernetes kubectl 命令自動(dòng)補(bǔ)全
容器只要沒(méi)有error報(bào)錯(cuò)就ok
Filebaet log
藍(lán)色為ES地址,紅色為啟動(dòng)正常
tomcat log
k8s服務(wù)是沒(méi)有問(wèn)題屯碴,我們?yōu)g覽器訪問(wèn)一下
端口為31000
接下來(lái)查看一下es日志
[root@i4t ~]# curl -XGET '10.4.82.115:9200/_cat/indices?v&pretty'
health status index? ? ? ? ? ? ? uuid? ? ? ? ? ? ? ? ? pri rep docs.count docs.deleted store.size pri.store.size
yellow open? filebeat-tomcat-log jRWrRLQjQ2SPTAe-wmy_EA? 5? 1? ? ? ? 272? ? ? ? ? ? 0? ? 244.6kb? ? ? ? 244.6kb
通過(guò)head插件查看是否有數(shù)據(jù)
并且已經(jīng)實(shí)時(shí)打印
進(jìn)入kibana控制臺(tái)