ELK日誌分析系統

ELK日誌分析系統

系統版本:

               CentOS release 6.9

軟件版本:

              jdk-8u121-linux-x64

              elasticsearch-5.5.1

              x-pack-5.5.1

              logstash-2.3 .2

              kafka_2.11-0.10.0.0

              zookeeper-3.4.9

              kibana-5.5.1

              elasticsearch-head

              filebeat-1.2.3

 

ELK作用:

                隨着業務量的增長,每天業務服務器將會產生上億條的日誌,單個日誌文件達幾個GB,這時我們發現用Linux自帶工具,cat grep awk 分析越來越力不從心了,而且除了服務器日誌,還有程序報錯日誌,分佈在不同的服務器,查閱繁瑣。

能解決的痛點:

                1、大量不同種類的日誌成爲了運維人員的負擔,不方便管理;

                2、單個日誌文件巨大,無法使用常用的文本工具分析,檢索困難;

                3、日誌分佈在多臺不同的服務器上,業務一旦出現故障,需要一臺臺查看日誌。

系統架構圖:

image.png

#備註:我們一共使用三臺機器,所以具體得配置和架構圖有所出入,具體根據現實情況來配置

第一層、數據採集層

最左邊的是業務服務器集羣,上面安裝了filebeat做日誌採集,同時把採集的日誌分別發送給兩個logstash服務。

第二層、數據處理層,數據緩存層

logstash服務把接受到的日誌經過格式處理,轉存到本地的kafka broker+zookeeper 集羣中。

第三層、數據轉發層

這個單獨的Logstash節點會實時去kafka broker集羣拉數據,轉發至ES DataNode。

第四層、數據持久化存儲

ES DataNode 會把收到的數據,寫磁盤,建索引庫。

第五層、數據檢索,數據展示

ES Master + Kibana 主要協調ES集羣,處理數據檢索請求,數據展示。

 

#公司自身使用架構圖分析

image.png

第一層、elasticsearch集羣

              elasticsearch一共四個節點,兩個主節點,兩個數據節點,其中一臺機器上部署兩個節點一個數據節點一個主節點,另外兩臺每臺部署一個節點

第二層、logstash數據採集

             兩個logstash收集客戶端filebeat發送來的數據,並且存入kafka集羣,再用另一個logstash從kafka集羣取出數據,將數據發送到elasticsearch的數據節點

第三層、kafka集羣

             三臺機器都安裝了kafka集羣,數據會同步,所以不論哪一臺掛了,都不會影響數據的正常

 

系統調優,JVM調優:

            # 配置系統最大打開文件描述符數

            vim /etc/sysctl.conf

            fs.file-max=65535

# 配置進程最大打開文件描述符

             vim /etc/security/limits.conf

             # End of file

            * soft nofile 131072

            * hard nofile 131072

            * soft nproc 2048

            * hard nproc 4096

 

jdk模塊安裝:

上傳1.8版本或者以上得JDK到/usr/local/,然後解壓配置/etc/profile,配置項如下:

export JAVA_HOME=/usr/local/jdk1.8.0_121

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

elasticsearch模塊安裝與配置:

#備註:因爲elasticsearch不允許使用root用戶來啓動,所以我們要新建一個用戶來啓動,我這邊使用elk可自行定義

useradd -m -d /opt/elk elk

#上傳elstacisearch到/opt/elk,解壓修改配置

#修改elk佔用得最小最大內存,我將主節點設置爲2g得內存,data數據節點設置爲6g內存,主要情況看自身機器配置來設定

vim /opt/elk/elasticsearch5_1/config/jvm.options

-Xms2g

-Xmx2g

#因爲我們需要一個用戶要通過用戶名和密碼來登陸kibana所以我們要把elasticsearch和kibana都安裝x-pack這個插件

/opt/elk/elasticsearch5_1/bin/elasticsearch-plugin install file:/opt/elk/x-pack-5.5.1.zip

#修改elasticsearch得配置,具體配置如下

# ---------------------------------- Cluster -----------------------------------

#設置elasticsearch組得命名

cluster.name: elk_log

# ------------------------------------ Node ------------------------------------

#設置此節點是否是主節點,主節點來控制其他得數據節點,我自身設置了兩個主節點,兩個數據節點

node.name: elk_node1

node.master : true

node.data : false

# ----------------------------------- Paths ------------------------------------

#設置日誌路徑和數據路徑

path.data: /opt/elk/elasticsearch5_1/elk/data

path.logs: /opt/elk/elasticsearch5_1/elk/logs

# ----------------------------------- Memory -----------------------------------

#是否鎖定內存

bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------

#設置此節點得Ip和綁定得端口

network.host: 192.168.172.110

http.port: 9201

transport.tcp.port : 9301

# --------------------------------- Discovery ----------------------------------

#設置主節點得地址,和能存在幾個主節點

discovery.zen.ping.unicast.hosts: ["192.168.172.110:9301", "192.168.172.112:9302"]

discovery.zen.minimum_master_nodes: 1

# ---------------------------------- X-pack -------------------------------------

#這樣不設置的話啓動的時候會又error報錯

bootstrap.system_call_filter: false

#這是head插件需要的參數,但是如果開啓了head那麼xpack.security.enabled必須要設置成false不然需要輸入密碼head獲取不到狀態,數據節點可以不加

http.cors.enabled: true

http.cors.allow-origin: "*"

#設置是否開啓密碼驗證

xpack.security.enabled: true

#設置是否開啓監控

xpack.monitoring.enabled: true

xpack.graph.enabled: false

#設置自動創建索引

action.auto_create_index: true

#其他幾個節點如果是主節點就跟上面這個一樣配置,不過Node部分的node.name、Network部分的全部、Paths部分的全部需要修改其他的配置都不變。如果是數據節點的話Node部分的全部都要修改要把node.master改成false node.data改成true、Network的部分全部修改、Paths的部分全部修改

另外data節點的/opt/elk/elasticsearch5_1/config/jvm.options更具自身機器的性能修改成了6G

#備註:大致得配置就是上面這些了,下面就是啓動了./bin/elasticsearch -d 表示後臺啓動,不過第一次啓動得時候先不要加-d來看一下elasticsearch啓動是否正常

 

kafka和zookeeper模塊安裝配置:

zookeeper:

#上傳zookeeper到/opt目錄下解壓

tar zxf zookeeper-3.4.9.tar.gz

#編輯zookeeper配置文件zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/zookeeper_data

clientPort=2181

#我這裏三臺服務器組了一個集羣所以每一臺上面都要安裝zookeeper並添加下面得配置

server.1=192.168.172.110:12888:13888

server.2=192.168.172.111:12888:13888

server.3=192.168.172.112:12888:13888

#要創建一個myid文件,每一臺都要寫入自己對應得數字(數字參考上面得server)

echo 1 > /opt/zookeeper_data/myid

#啓動zookeeper和查看狀態

/opt/zookeeper/bin/zkServer.sh start

/opt/zookeeper/bin/zkServer.sh status

#備註:其他兩臺zoo.cfg配置都相同不同的是對應server.2 和server.3 去創建myid

kafka:

#編輯kafka配置文件server.properties

#kafka server id

broker.id=1

#port

port = 9092

host.name = 192.168.172.110

#線程設置

num.network.threads=9

num.io.threads=16

#此處默認

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

#默認配置日誌路徑要修改

log.dirs=/opt/kafka-logs

num.partitions=1

num.recovery.threads.per.data.dir=1

log.flush.interval.messages=10000

log.flush.interval.ms=3000

#抓取得日誌要保存多久(小時)

log.retention.hours=12

#日誌多大分割

log.segment.bytes=1073741824

#多久檢測一次

log.retention.check.interval.ms=300000

#配置zookeeper地址和超時時間

zookeeper.connect=192.168.172.110:2181,192.168.172.111:2181,192.168.112:2181

zookeeper.connection.timeout.ms=6000

#備註:另外兩臺相同,就是broker.id要修改一下

#寫入/etc/hosts三臺機器的hostname和ip地址每一臺都要寫

#kafka啓動命令:kafka-server-start.sh -daemon config/server.properties

#kafka新建topic

./bin/kafka-topics.sh --create --zookeeper 192.168.169.79:2181 --replication-factor 3 --partitions 2 --topic (主題名字) ecplogs --replication-factor (有幾個節點就寫多少)

#列出有那些topics

./bin/kafka-topics.sh --list --zookeeper 192.168.169.79:2181

#刪除一個消息主題topics

./bin/kafka-topics.sh --zookeeper (所有集羣的zookeeper) --delete --topics ecplogs

#備註:建立topic分區可以讓你把兩個不同部門的業務放到不同的分區裏面

 

filebeat模塊配置:

#上傳filebeat到需要採集數據的客戶端/opt下並且解壓

vim filebeat.yml

#就寫一下格式如何寫

filebeat:

prospectors:

-

paths:

- "/opt/access-common/access-common/logs/access-common.log"

input_type: log

document_type: access-common

output:

logstash:

#通過5044端口去讓logstash接收

hosts: ["192.168.172.111:5044","192.168.172.112:5044"]

               #備註:添加其他項目的日誌地址和type只要添加標紅的這個格式就可以了

 

logstash模塊配置:

#logstash有接收filebeat和轉發到elasticsearch data節點兩個配置,因爲公司要看完整日誌,所以不做任何得規則

#接收filebeat的logstash,上傳logstash到/opt/解壓修改配置文件logstash_filebeat.conf

input {

beats {

codec => multiline {

pattern => "^2017"

negate => true

what => "previous"

}

port => 5044

}

}

output {

kafka {

bootstrap_servers => "192.168.172.110:9092,192.168.172.111:9092,192.168.172.112:9092"

topic_id => "paylog"

}

}

#發送到elasticsearch的logstash的配置,只啓動一個發送到elasticsearch data節點就足夠了

input{

kafka {

group_id => "logstash"

topic_id => "paylog"

reset_beginning => false

consumer_threads => 50

decorate_events => true

zk_connect => "192.168.172.110:2181,192.168.172.111:2181,192.168.112:2181"

}

}

output {

########################174.85#######################

if [type] == "3rd-adv-access" {

elasticsearch {

hosts => ["192.168.172.110:9203","192.168.172.111:9204"]

index => "3rd-adv-access-%{+YYYY.MM.dd}"

manage_template => true

user => elastic password => skymobi

}

}

}

#備註:logstash啓動命令 ./bin/logstash -w 10 -b 2000 -f ../config/logstash_data.conf

 

kibana模塊的安裝和配置:

 

#上傳kibana到/opt解壓,因爲要使用密碼登陸kibana所以kibana要安裝x-pack插件

./bin/kibana-plugin install file:/opt/elk/x-pack-5.5.1.zip

#修改kibana配置文件kibana.yml

server.port: 5601

server.host: "192.168.172.110"

#配置elasticsearch主節點的地址,如果一個掛了他會檢測另一個

elasticsearch.url: "http://192.168.172.110:9201"

elasticsearch.url: "http://192.168.172.112:9202"

#設置登陸kibana的時候的賬號密碼

elasticsearch.username: "elastic"

elasticsearch.password: "skymobi"

xpack.security.enabled: true

xpack.monitoring.enabled: true

xpack.graph.enabled: false

xpack.reporting.enabled: false

#備註:kibana啓動命令 nohup /opt/kibana/bin/kibana &

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章