基于docker的ELK+filebeat+kafka環境部署
ELK以及常用模式 環境部署 一、docker 二、centos 三、kafka 四、filebeat(centos容器中) 五、logstash 六、elasticsearch(es) 七、kibana 八、最后走一遍程序 九、docker-compose和dockerfile
ELK以及常用模式
什么是elk以及常用模式
環境部署
順序:和log走向一直filebeat->kafka->logstash
<style>#mermaid-svg-j2lrO8Rn2IDobFQJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .label text{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .node rect,#mermaid-svg-j2lrO8Rn2IDobFQJ .node circle,#mermaid-svg-j2lrO8Rn2IDobFQJ .node ellipse,#mermaid-svg-j2lrO8Rn2IDobFQJ .node polygon,#mermaid-svg-j2lrO8Rn2IDobFQJ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-j2lrO8Rn2IDobFQJ .node .label{text-align:center;fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .node.clickable{cursor:pointer}#mermaid-svg-j2lrO8Rn2IDobFQJ .arrowheadPath{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-j2lrO8Rn2IDobFQJ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-j2lrO8Rn2IDobFQJ .edgeLabel rect{opacity:0.9}#mermaid-svg-j2lrO8Rn2IDobFQJ .edgeLabel span{color:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-j2lrO8Rn2IDobFQJ .cluster text{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-j2lrO8Rn2IDobFQJ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-j2lrO8Rn2IDobFQJ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .actor-line{stroke:grey}#mermaid-svg-j2lrO8Rn2IDobFQJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .sequenceNumber{fill:#fff}#mermaid-svg-j2lrO8Rn2IDobFQJ #sequencenumber{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .messageText{fill:#333;stroke:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-j2lrO8Rn2IDobFQJ .labelText,#mermaid-svg-j2lrO8Rn2IDobFQJ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .loopText,#mermaid-svg-j2lrO8Rn2IDobFQJ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-j2lrO8Rn2IDobFQJ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-j2lrO8Rn2IDobFQJ .noteText,#mermaid-svg-j2lrO8Rn2IDobFQJ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-j2lrO8Rn2IDobFQJ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-j2lrO8Rn2IDobFQJ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-j2lrO8Rn2IDobFQJ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .section{stroke:none;opacity:0.2}#mermaid-svg-j2lrO8Rn2IDobFQJ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-j2lrO8Rn2IDobFQJ .section2{fill:#fff400}#mermaid-svg-j2lrO8Rn2IDobFQJ .section1,#mermaid-svg-j2lrO8Rn2IDobFQJ .section3{fill:#fff;opacity:0.2}#mermaid-svg-j2lrO8Rn2IDobFQJ .sectionTitle0{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .sectionTitle1{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .sectionTitle2{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .sectionTitle3{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-j2lrO8Rn2IDobFQJ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .grid path{stroke-width:0}#mermaid-svg-j2lrO8Rn2IDobFQJ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-j2lrO8Rn2IDobFQJ .task{stroke-width:2}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText:not([font-size]){font-size:11px}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-j2lrO8Rn2IDobFQJ .task.clickable{cursor:pointer}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText0,#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText1,#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText2,#mermaid-svg-j2lrO8Rn2IDobFQJ .taskText3{fill:#fff}#mermaid-svg-j2lrO8Rn2IDobFQJ .task0,#mermaid-svg-j2lrO8Rn2IDobFQJ .task1,#mermaid-svg-j2lrO8Rn2IDobFQJ .task2,#mermaid-svg-j2lrO8Rn2IDobFQJ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutside0,#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutside2{fill:#000}#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutside1,#mermaid-svg-j2lrO8Rn2IDobFQJ .taskTextOutside3{fill:#000}#mermaid-svg-j2lrO8Rn2IDobFQJ .active0,#mermaid-svg-j2lrO8Rn2IDobFQJ .active1,#mermaid-svg-j2lrO8Rn2IDobFQJ .active2,#mermaid-svg-j2lrO8Rn2IDobFQJ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-j2lrO8Rn2IDobFQJ .activeText0,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeText1,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeText2,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeText3{fill:#000 !important}#mermaid-svg-j2lrO8Rn2IDobFQJ .done0,#mermaid-svg-j2lrO8Rn2IDobFQJ .done1,#mermaid-svg-j2lrO8Rn2IDobFQJ .done2,#mermaid-svg-j2lrO8Rn2IDobFQJ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-j2lrO8Rn2IDobFQJ .doneText0,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneText1,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneText2,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneText3{fill:#000 !important}#mermaid-svg-j2lrO8Rn2IDobFQJ .crit0,#mermaid-svg-j2lrO8Rn2IDobFQJ .crit1,#mermaid-svg-j2lrO8Rn2IDobFQJ .crit2,#mermaid-svg-j2lrO8Rn2IDobFQJ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCrit0,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCrit1,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCrit2,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCrit0,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCrit1,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCrit2,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-j2lrO8Rn2IDobFQJ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-j2lrO8Rn2IDobFQJ .milestoneText{font-style:italic}#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCritText0,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCritText1,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCritText2,#mermaid-svg-j2lrO8Rn2IDobFQJ .doneCritText3{fill:#000 !important}#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCritText0,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCritText1,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCritText2,#mermaid-svg-j2lrO8Rn2IDobFQJ .activeCritText3{fill:#000 !important}#mermaid-svg-j2lrO8Rn2IDobFQJ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-j2lrO8Rn2IDobFQJ g.classGroup text .title{font-weight:bolder}#mermaid-svg-j2lrO8Rn2IDobFQJ g.clickable{cursor:pointer}#mermaid-svg-j2lrO8Rn2IDobFQJ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-j2lrO8Rn2IDobFQJ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-j2lrO8Rn2IDobFQJ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-j2lrO8Rn2IDobFQJ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .dashed-line{stroke-dasharray:3}#mermaid-svg-j2lrO8Rn2IDobFQJ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ .commit-id,#mermaid-svg-j2lrO8Rn2IDobFQJ .commit-msg,#mermaid-svg-j2lrO8Rn2IDobFQJ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-j2lrO8Rn2IDobFQJ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-j2lrO8Rn2IDobFQJ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-j2lrO8Rn2IDobFQJ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-j2lrO8Rn2IDobFQJ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-j2lrO8Rn2IDobFQJ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-j2lrO8Rn2IDobFQJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-j2lrO8Rn2IDobFQJ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-j2lrO8Rn2IDobFQJ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-j2lrO8Rn2IDobFQJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-j2lrO8Rn2IDobFQJ .edgeLabel text{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-j2lrO8Rn2IDobFQJ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-j2lrO8Rn2IDobFQJ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-j2lrO8Rn2IDobFQJ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-j2lrO8Rn2IDobFQJ .note-edge{stroke-dasharray:5}#mermaid-svg-j2lrO8Rn2IDobFQJ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-j2lrO8Rn2IDobFQJ .error-icon{fill:#522}#mermaid-svg-j2lrO8Rn2IDobFQJ .error-text{fill:#522;stroke:#522}#mermaid-svg-j2lrO8Rn2IDobFQJ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-j2lrO8Rn2IDobFQJ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-j2lrO8Rn2IDobFQJ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-j2lrO8Rn2IDobFQJ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-j2lrO8Rn2IDobFQJ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-j2lrO8Rn2IDobFQJ .marker{fill:#333}#mermaid-svg-j2lrO8Rn2IDobFQJ .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-j2lrO8Rn2IDobFQJ {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
filebeat
kafka
logstash
es
kibana
環境:centos7虛擬機(首先要關閉防火墻,然后要關閉防火墻,最后關閉防火墻) centos6.x用的是iptable,centos7.x用的是firewall 不關閉防火墻會導致容器之間不能通訊
一、docker
1、安裝docker
yum install docker -y
2、啟動docker
systemctl start docker
二、centos
拉取centos鏡像 產生的log檔案和filebeat運行在這個centos容器中 拉取鏡像:
docker pull centos
完成之后可以使用docker images查看鏡像情況
制作centos容器
docker run -itd --name centos --privileged= true centos /sbin/init
這里需要使用–privileged=true獲得root權限,才能使用systemctl等指令 使用docker ps查看容器情況
三、kafka
主要參考了這篇文章 快速搭建kafka集群
可以再通過python操作一次kafka確定是可以正常作業的,同時要開啟一個終端運行kafka的消費者腳本
from kafka import KafkaProducer
producer = KafkaProducer( bootstrap_servers= '10.211.55.4:32771' ) # 連接kafka
msg = "hello python kafka" ". encode( 'utf-8' )
producer. send( 'mykafka' , msg)
producer. close( )
遇到的坑:
創建容器,創建kafka的topic一切順利,就是在生產者生產訊息的時候報LEADER_NOT_AVALIBLE的錯誤,找了很多資料,無果,最后發現其實就是防火墻的問題,因為kafka基于zookeeper,需要在集群之間通訊, 在把防火墻設定為開機關閉后,重啟虛擬機之后啟動kafka容器,又報/var/run/docker.sock權限不足的問題,找了很多原因,也無果,回憶了一下,也就做了關閉防火墻這個操作,于是把防火墻又打開,重新創建了容器,又好了,具體為什么還不太清楚,
四、filebeat(centos容器中)
進入centos容器:
docker exec -it --privileged= true centos /bin/bash
安裝wget:
yum install wget -y
在elastic官網找到下載地址
進入自己filebeat的目錄
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz
解壓即安裝 配置(.yml)如下:
filebeat. inputs:
- type: log
enabled: true
paths:
- / usr/ log/ elk. log
output. kafka:
hosts: [ "10.211.55.4:32770" , "10.211.55.4:32771" , "10.211.55.4:32769" ]
topic: 'mykafka'
默認的output是elasticsearch,需要注釋掉 output.kafka里的hosts的ip就是虛擬機的ip,埠需要在虛擬機上docker ps看一下映射的埠,這個埠可能根據kafka啟動的情況變動,一定要注意,不然也會報錯,后續應該要改一下這個埠映射,不可能一直修改配置,
配置完成之后啟動filebeat
. / filebeat - e - c filebeat. yml
然后向日志檔案里加東西試試
echo "filebeat test" >> / usr/ log/ elk. log
kafka這邊的消費者終端能收到東西就說明filebeat到kafka這里是好了
五、logstash
拉取logstash鏡像 logstash的鏡像沒法直接pull logstash來拉取 我們在dockerhub中找到需要的版本,找到對應的dockerfile中的版本全名,如:docker.elastic.co/logstash/logstash:7.9.3
docker pull docker.elastic.co/logstash/logstash:7.9.3
完成之后可以使用docker images查看鏡像情況
制作logstash容器
docker run -itd -p 5044:5044 -p 5045:5045 --name logstash -e ES_JAVA_OPTS= "-Xms1G -Xmx1G" logstash:7.9.3
使用docker ps查看容器情況
進入logstash容器修改組態檔(也可以通過映射檔案,在外面直接修改然后再啟動容器)
logstash.yml:
http. host: "0.0.0.0"
xpack. monitoring. elasticsearch. hosts: [ "http://10.211.55.4:9200" ]
elk.config:
input {
kafka {
bootstrap_servers => [ "10.211.55.4:32771,10.211.55.4:32769,10.211.55.4:32770" ]
consumer_threads => 1
topics => [ "mykafka" ]
auto_offset_reset => "earliest"
auto_commit_interval_ms => 1000
}
}
output {
stdout{ }
elasticsearch {
hosts => "http://10.211.55.4:9200"
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
測驗階段可以在input里面加一個stdin{},可以通過控制臺輸入
啟動logstash:
bin/ logstash - f config/ elk. config
可能會遇到這個報錯
Logstash could not be started because there is already another instance using the
configured data directory. If you wish to run multiple instances, you must change
the "path.data" setting.
到data目錄下洗掉.lock檔案即可
六、elasticsearch(es)
es的鏡像沒法直接pull elasticsearch來拉取 我們在dockerhub中找到需要的版本,找到對應的dockerfile中的版本全名,如:docker.elastic.co/elasticsearch/elasticsearch:7.9.3
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3
創建需要掛載的檔案夾和組態檔
mkdir - p / opt/ es/ config
mkdir - p / opt/ es/ data
echo "http.host: 0.0.0.0" >> / opt/ es/ config/ elasticsearch. yml
docker run -- name es -- privileged= true - p 9200 : 9200 - p 9300 : 9300
- e "discovery.type=single-node" - e ES_JAVA_OPTS = "-Xms64m -Xmx128m"
- v / opt/ es/ config/ elasticsearch. yml: / usr/ share/ elasticsearch/ config/ elasticsearch. yml
- v / opt/ es/ data: / usr/ share/ elasticsearch/ data
- v / opt/ es/ plugins: / usr/ share/ elasticsearch/ plugins
- d docker. elastic. co/ elasticsearch/ elasticsearch: 7.9 .3 / usr/ sbin/ init
要注意一點,這些相關的檔案夾和elasticsearch.yml一定要自己創建出來,不然docker會幫你創建一個叫elasticsearch.yml的檔案夾,又報一些莫名其妙的錯誤 data檔案夾需要給權限chmod -R 777不然沒法創建下面相應的檔案夾,大概就是會報node之類的檔案夾沒權限
其他沒什么了,可以直接訪問9200埠看看能不能用
七、kibana
和es一樣,拉鏡像,建容器
docker pull docker. elastic. co/ kibana/ kibana: 7.9 .3
docker run - d -- restart= always -- log- driver json- file
-- log- opt max- size= 100 m -- log- opt max- file= 2 -- name xinyar- kibana - p 5601 : 5601
- v / opt/ elk/ kibana. yml: / usr/ share/ kibana/ config/ kibana. yml
docker. elastic. co/ kibana/ kibana: : 7.9 .3
也是直接瀏覽器訪問5601埠即可,需要添加一些索引搜索之類的,需要自己研究一下,寫起來比較麻煩,略過,
八、最后走一遍程序
filebeat加入日志
echo "elktest" >> / usr/ log/ elk. log
kafka消費:
bash- 4.4 # kafka- console- consumer. sh -- bootstrap- server kafka_kafka- cluster_1: 9092 from - beginning -- topic mykafka
{ "@timestamp" : "2020-11-04T11:14:13.688Z" , "@metadata" : { "beat" : "filebeat" , "type" : "_doc" , "version" : "7.9.3" } , "input" : { "type" : "log" } , "agent" : { "type" : "filebeat" , "version" : "7.9.3" , "hostname" : "a630f42b741e" , "ephemeral_id" : "fa366576-e93b-4c97-bda3-8ee53078552a" , "id" : "b523dfc7-956b-4b17-a272-50befeccbd38" , "name" : "a630f42b741e" } , "ecs" : { "version" : "1.5.0" } , "host" : { "hostname" : "a630f42b741e" , "architecture" : "x86_64" , "os" : { "name" : "CentOS Linux" , "kernel" : "3.10.0-1127.el7.x86_64" , "codename" : "Core" , "platform" : "centos" , "version" : "8 (Core)" , "family" : "redhat" } , "id" : "a630f42b741edd05d37d5cf9bb264c66" , "containerized" : true , "ip" : [ "172.17.0.3" , "fe80::42:acff:fe11:3" ] , "name" : "a630f42b741e" , "mac" : [ "02:42:ac:11:00:03" ] } , "message" : "elktest" , "log" : { "file" : { "path" : "/usr/log/elk.log" } , "offset" : 6 } }
logstash的stdout:
{
"@timestamp" => 2020-11-04T11:14:16.176Z,
"@version" => "1",
"message" => "{\"@timestamp\":\"2020-11-04T11:14:13.688Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"7.9.3\"},\"input\":{\"type\":\"log\"},\"agent\":{\"type\":\"filebeat\",\"version\":\"7.9.3\",\"hostname\":\"a630f42b741e\",\"ephemeral_id\":\"fa366576-e93b-4c97-bda3-8ee53078552a\",\"id\":\"b523dfc7-956b-4b17-a272-50befeccbd38\",\"name\":\"a630f42b741e\"},\"ecs\":{\"version\":\"1.5.0\"},\"host\":{\"hostname\":\"a630f42b741e\",\"architecture\":\"x86_64\",\"os\":{\"name\":\"CentOS Linux\",\"kernel\":\"3.10.0-1127.el7.x86_64\",\"codename\":\"Core\",\"platform\":\"centos\",\"version\":\"8 (Core)\",\"family\":\"redhat\"},\"id\":\"a630f42b741edd05d37d5cf9bb264c66\",\"containerized\":true,\"ip\":[\"172.17.0.3\",\"fe80::42:acff:fe11:3\"],\"name\":\"a630f42b741e\",\"mac\":[\"02:42:ac:11:00:03\"]},\"message\":\"elktest\",\"log\":{\"file\":{\"path\":\"/usr/log/elk.log\"},\"offset\":6}}"
}
最后就是kibana的web界面,內容都差不多,截圖不太方便,就不發了
九、docker-compose和dockerfile
后續看看能不能把這些合并起來