ELK日誌分析系統node
系統版本:linux
CentOS release 6.9bootstrap
軟件版本:vim
jdk-8u121-linux-x64緩存
elasticsearch-5.5.1服務器
x-pack-5.5.1架構
logstash-2.3 .2cors
kafka_2.11-0.10.0.0運維
zookeeper-3.4.9jvm
kibana-5.5.1
elasticsearch-head
filebeat-1.2.3
ELK做用:
隨着業務量的增加,天天業務服務器將會產生上億條的日誌,單個日誌文件達幾個GB,這時咱們發現用Linux自帶工具,cat grep awk 分析愈來愈力不從心了,並且除了服務器日誌,還有程序報錯日誌,分佈在不一樣的服務器,查閱繁瑣。
能解決的痛點:
一、大量不一樣種類的日誌成爲了運維人員的負擔,不方便管理;
二、單個日誌文件巨大,沒法使用經常使用的文本工具分析,檢索困難;
三、日誌分佈在多臺不一樣的服務器上,業務一旦出現故障,須要一臺臺查看日誌。
系統架構圖:
#備註:咱們一共使用三臺機器,因此具體得配置和架構圖有所出入,具體根據現實狀況來配置
第一層、數據採集層
最左邊的是業務服務器集羣,上面安裝了filebeat作日誌採集,同時把採集的日誌分別發送給兩個logstash服務。
第二層、數據處理層,數據緩存層
logstash服務把接受到的日誌通過格式處理,轉存到本地的kafka broker+zookeeper 集羣中。
第三層、數據轉發層
這個單獨的Logstash節點會實時去kafka broker集羣拉數據,轉發至ES DataNode。
第四層、數據持久化存儲
ES DataNode 會把收到的數據,寫磁盤,建索引庫。
第五層、數據檢索,數據展現
ES Master + Kibana 主要協調ES集羣,處理數據檢索請求,數據展現。
#公司自身使用架構圖分析
第一層、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 &