最近兩周,需要部署一套elk日志收集系統(tǒng),順便將其整理成部署文檔
elk + kafka + zookeeper生產(chǎn)實(shí)踐
1.查看系統(tǒng)版本
2.確認(rèn)基礎(chǔ)環(huán)境
3.安裝zookeeper
4.安裝kafka
5.安裝filebeat
6.安裝Elasticsearch
7.安裝kibana
8.安裝Logstash
9.關(guān)聯(lián)配置
10.最終驗(yàn)證
1.查看系統(tǒng)版本
cat /etc/redhat-release #查看系統(tǒng)版本 CentOS Linux release 7.2.1511 (Core)
2.確認(rèn)基礎(chǔ)環(huán)境
update-alternatives --config java #查看java環(huán)境 1.8 openjdk +
go version #go version go1.11 linux/amd64
go env #gopath,goroot,gotooldir等確認(rèn)下沒問題
#創(chuàng)建elk用戶(用于啟動Elasticsearch,修改Elasticsearch的配置)
1.建用戶:
adduser elk //新建elk用戶
passwd elk //給elk用戶設(shè)置密碼
密碼:password
2.創(chuàng)建工作組
創(chuàng)建用戶時自動創(chuàng)建了
3.驗(yàn)證用戶和組是否創(chuàng)建成功
cat /etc/group
cat /etc/passwd
4.授予elk用戶sudo權(quán)限
root用戶下:sudo vim /etc/sudoers
在 root ALL=(ALL) ALL
下新增記錄 elk ALL=(ALL:ALL) NOPASSWD:ALL
#安裝的elk+filebeat都是6.4官方推薦穩(wěn)定版本
#安裝的kafka : 2.11-1.1.1 , zookeeper : 3.4.12
#wget,yum,本地download下上傳服務(wù)器,都可以,官網(wǎng)版本確定,對應(yīng)系統(tǒng)確定即可
#這里采用的全部是下載壓縮包安裝方式:
3.安裝zookeeper
#將zookeeper壓縮包復(fù)制到zookeeper安裝目錄下,定為{zookeeper_home}
#默認(rèn)安裝三臺zookeeper服務(wù)器集群
tar -xzf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12
#修改配置文件
vim conf/zoo_sample.cfg
dataDir=/var/zookeeper #修改
#添加:
server.1=192.168.23.159:2888:3888
server.2=192.168.23.160:2888:3888
server.3=192.168.23.16:2888:3888
#root下新建目錄:
mkdir /var/zookeeper
#啟動zookeeper
#復(fù)制zoo.cfg文件
cp conf/zoo_sample.cfg conf/zoo.cfg
bin/zkServer.sh start
ps -ef |grep zookeeper #查看啟動參數(shù)
4.安裝kafka
#官網(wǎng)下載,filebeat目前版本限制kafka版本必須在0.8.2.0 and 1.1.1 之間
#直接使用 Kafka 2.11-1.1.1 進(jìn)行安裝
#因?yàn)橹辽傩枰?臺主機(jī),因此,部署在159,160,161三臺機(jī)器上,目錄 /home/sre/deploy/elk
#添加本地hostname的配置
listeners = PLAINTEXT://localhost:9092
#啟動kafka server
bin/kafka-server-start.sh config/server.properties &
#查看端口占用情況
netstat -tunlp|egrep "(8888|9092|9093|9094|2181)"
#創(chuàng)建kafka的topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic topic_name
#kafka至少要3個活動的server才能創(chuàng)建topic,但查看topic沒有這個限制
#查看topic
bin/kafka-topics.sh --list --zookeeper 192.168.23.159:2181
#查看topic詳情
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic_name
#刪除topic
bin/kafka-topics.sh --delete --zookeeper 192.168.23.159:2181 --topic topic_name
#kafka對應(yīng)topic生產(chǎn)數(shù)據(jù)
bin/kafka-console-producer.sh --broker-list 192.168.23.159:9092 --topic test
#向kafka對應(yīng)topic申請,消費(fèi)數(shù)據(jù)(默認(rèn)從上次結(jié)束的地方開始消費(fèi))
5.安裝filebeat
#下載安裝包(centos的對應(yīng)filebeat_file.rpm)并安裝
rpm -iv filebeat_file.rpm
#rpm安裝的filebeat程序根目錄
/usr/share/filebeat
#修改配置文件
sudo vim /etc/filebeat/filebeat.yml
#配置多個input,區(qū)分不同來源的日志,并設(shè)置不同的fields_topic(對應(yīng)不同kafka的topic),之后統(tǒng)一通過kafka out分別輸出到對應(yīng)的kafka topic 中去
#啟用指定模板
sudo filebeat modules enable elasticsearch kafka kibana system nginx mysql
#查看模板啟用情況
sudo filebeat modules list
#將filebeat.reference.yml中關(guān)于kafka output相關(guān)的配置復(fù)制到filebeat.yml文件中output的部分,即可通過service啟動
systemctl status filebeat
systemctl start filebeat
systemctl restart filebeat
systemctl stop filebeat
6.安裝Elasticsearch
#elasticsearch全部操作均以elk用戶登錄
cd /usr/local
#權(quán)限授予(elk用戶目錄進(jìn)入權(quán)限)
chown -R elk.elk /home/
chown -R elk.root /home/sre/deploy/go/src/
shasum -a 512 -c elasticsearch-oss-6.4.2.tar.gz.sha512 #根據(jù).sha512校驗(yàn)文件是否沒問題
tar -xzf elasticsearch-oss-6.4.2.tar.gz
#給elk用戶/組賦予elasticsearch-oss-6.4.2目錄的權(quán)限
sudo chown -R elk:elk elasticsearch-oss-6.4.2
cd elasticsearch-oss-6.4.2/
#修改配置文件(結(jié)合2.x.生產(chǎn)上線前的配置中的sudo vim ./config/elasticsearch.yml部分修改)
sudo vim ./config/elasticsearch.yml
#找到 network.host: 的一行數(shù)據(jù),修改為: network.host: hostIp
#去掉 http.port 前面的注釋,如果需要修改端口,也需要將端口號修改為需要的值
#設(shè)置集群名:cluster.name: sre-elasticsearch
#設(shè)置節(jié)點(diǎn)名:master-node-{$node-number}
#設(shè)置初始節(jié)點(diǎn)發(fā)現(xiàn)接入的host列表:discovery.zen.ping.unicast.hosts: ["192.168.23.159", "192.168.23.160" ,"192.168.23.16"]
#設(shè)置mater最小節(jié)點(diǎn):discovery.zen.minimum_master_nodes: 2
#以上報(bào)錯修改配置(el的host是localhost時不會報(bào)錯)
sudo vim /etc/sysctl.conf
vm.max_map_count=655360
sudo sysctl -p #修改內(nèi)核后立即刷新
sudo vim /etc/security/limits.conf
#添加下面四個
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
ulimit -a #查看配置參數(shù)
#root用戶下執(zhí)行 ulimit -n 65536
#切換到elk用戶,會話級設(shè)置: su - elk ##之后新建的elk 會話也使用了新的設(shè)置
ulimit -a #查看配置參數(shù)
#啟動Elasticsearch
./bin/elasticsearch -d -p pid
#驗(yàn)證Elasticsearch是否正常運(yùn)行
curl 'localhost:9200/' #看到返回json數(shù)據(jù)即表示正常運(yùn)行了 curl '192.168.23.159:9200/'
#查看Elasticsearch集群(cluster)狀態(tài)的api
curl -XGET 'http://192.168.23.159:9200/_cluster/health'
7.安裝kibana
#官網(wǎng)目前一個kibana只能指向一個具體的Elasticsearch,對Elasticsearch集群,官方建議kibana指向?qū)iT的協(xié)調(diào)節(jié)點(diǎn)(coordinating-node)
tar -xzf kibana-oss-6.4.2-linux-x86_64.tar.gz
#給elk用戶/kibana-6.4.2-linux-x86_64目錄的權(quán)限
sudo chown -R elk:elk kibana-6.4.2-linux-x86_64
cd kibana-6.4.2-linux-x86_64/
#修改配置文件
sudo vim ./config/kibana.yml
#修改server.host成122.11.47.183以使其他機(jī)器可以訪問kibana,默認(rèn)端口5601(可通過server.port配置)
#找到server.host: "localhost" ,取消掉注釋,改為所在ip(方便外網(wǎng)訪問)
#修改Elasticsearch.url 到 '122.11.47.183:9200' '192.168.23.159:5601'
#
sudo mkdir /var/log/kibana
#給elk用戶/kibana-6.4.2-linux-x86_64目錄的權(quán)限
sudo chown -R elk:elk /var/log/kibana
#事實(shí)上并未在目錄記錄日志############################################
#啟動kibana
./bin/kibana
#測試是否成功啟動,返回成功的json即表示成功啟動kibana
curl 'localhost:5601/' curl '192.168.23.159:5601/'
8.安裝Logstash
#同上
#測試是否成功
./bin/logstash -e 'input { stdin {} } output { stdout {} }'
#成功啟動后,在命令行輸入,自動識別輸入,返回json的output
#添加配置文件,指定啟動的配置文件
./bin/logstash -f $file_path/config_file
#配置內(nèi)容:
output {
elasticsearch { hosts => ["122.11.47.183:9200"] }
stdout { codec => rubydebug }
}
#logstash可以配置到Elasticsearch的集群的output,方法是給一個 host:port的數(shù)組
9.關(guān)聯(lián)配置
1.filebeat 在一個終端只安裝一個,可以區(qū)分不同路徑和不同文件夾下的文件,并將其自動推送到kafka的對應(yīng)topic中去,一個filebeat可以負(fù)載均衡地對應(yīng)一個kafka集群
2.logstash 可以從一個kafka集群的多個指定topic中獲取(消費(fèi))數(shù)據(jù),并將其在記錄的根級以type的key-value對將其區(qū)分索引開來
3.elasticsearch可以是一個分布式存儲,索引的數(shù)據(jù)庫集群,接收多個來源的數(shù)據(jù)
4.kibana只接受elasticsearch中一個固定主機(jī)的數(shù)據(jù),以此作為web前段展現(xiàn),查詢,配置維護(hù)的入口
5.總結(jié):多個filebeat到fafka集群,單個 logstash 從kafka獲取數(shù)據(jù),輸入到elasticsearch集群,kibana從elasticsearch中固定的一個主機(jī)進(jìn)入/查詢/維護(hù)數(shù)據(jù))
10.最終驗(yàn)證
在filebeat配置的log文件中輸入數(shù)據(jù),看對應(yīng)topic是否數(shù)據(jù)進(jìn)入kafka,logstash是否成功從kafka獲取到數(shù)據(jù),kibana上是否可以看到