ELK超詳細(xì)配置
點(diǎn)擊“程序員面試吧”,選擇“星標(biāo)??”
“下拉至文末”查看更多


Elasticsearch(es):通過搭建群集;存儲日志數(shù)據(jù),索引日志數(shù)據(jù)
Logstash :收集日志,收集到了后給es存儲
Kibana :視圖形式展現(xiàn)日志信息,更加人性化
將日志進(jìn)行集中化管理
將日志格式化(Logstash)并輸出到Elasticsearch
對格式化后的數(shù)據(jù)進(jìn)行索引和存儲(Elasticsearch)
前端數(shù)據(jù)的展示(Kibana)


接近實(shí)時(NRT),Elasticsearch是一個接近實(shí)時的搜索平臺,這意味著,從索引一個文檔直到這個文檔能夠被搜索到有一個輕微的延遲(通常是1秒)
集群(cluster),一個集群就是由一個或多個節(jié)點(diǎn)組織在一起,它們共同持有你整個的數(shù)據(jù),并一起提供索引和搜索功能。其中一個節(jié)點(diǎn)為主節(jié)點(diǎn),這個主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,并提供跨節(jié)點(diǎn)的聯(lián)合索引和搜索的功能。集群有一個唯一性標(biāo)示的名字,默認(rèn)是Elasticsearch,集群名字很重要,每個節(jié)點(diǎn)是基于集群名字加入到其集群中的。因此,確保在不同環(huán)境中使用不同的集群名字。一個集群可以只有一個節(jié)點(diǎn)。強(qiáng)烈建議在配置Elasticsearch時,配置成集群模式。
節(jié)點(diǎn)(node),節(jié)點(diǎn)就是一臺單一的服務(wù)器,是集群的一部分,存儲數(shù)據(jù)并參與集群的索引和搜索功能。像集群一樣,節(jié)點(diǎn)也是通過名字來標(biāo)識,默認(rèn)是在節(jié)點(diǎn)啟動時隨機(jī)分配的字符名。當(dāng)然,你可以自己定義。該名字也很重要,在集群中用于識別服務(wù)器對應(yīng)的節(jié)點(diǎn)。節(jié)點(diǎn)可以通過指定集群名字來加入到集群中。默認(rèn)情況,每個節(jié)點(diǎn)被設(shè)置成加入到Elasticsearch集群。如果啟動了多個節(jié)點(diǎn),假設(shè)能自動發(fā)現(xiàn)對方,他們將會自動組建一個名為Elasticsearch的集群。
索引(type),在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區(qū),其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設(shè)你運(yùn)營一個博客平臺并且將你所有的數(shù)據(jù)存儲到一個索引中。在這個索引中,你可以為用戶數(shù)據(jù)定義一個類型,為博客數(shù)據(jù)定義另一個類型,當(dāng)然,也可以為評論數(shù)據(jù)定義另一個類型。
一款強(qiáng)大的數(shù)據(jù)處理工具
可實(shí)現(xiàn)數(shù)據(jù)傳輸、格式處理、格式化輸出
數(shù)據(jù)輸入(從業(yè)務(wù)輸入)、數(shù)據(jù)加工(如過濾、改寫等)以及數(shù)據(jù)輸出(輸出到Elasticsearch群集)
Logstash的主要組件:
shipper:日志收集者,負(fù)責(zé)監(jiān)控本地日志文件的變化,及時把日志文件的最新內(nèi)容收集起來。通常,遠(yuǎn)程代理端(agent)只需要運(yùn)行這個組件即可
indexer:日志存儲者,負(fù)責(zé)接收日志并寫入到本地文件
broker:日志hub,負(fù)責(zé)連接多個shipper和多個indexer
search and storage:允許對事件進(jìn)行搜索和存儲
web interface:基于Web的展示界面
一個針對Elasticsearch的開源分析及可視化平臺
搜索、查看存儲在Elasticsearch索引中的數(shù)據(jù)
通過各種圖表進(jìn)行高級數(shù)據(jù)分析及展示
主要功能:
Elasticsearch無縫之集成
整合數(shù)據(jù),復(fù)雜數(shù)據(jù)分析
讓更多團(tuán)隊(duì)成員收益
接口靈活,分享更容易
配置簡單,可視化多數(shù)據(jù)源
簡單數(shù)據(jù)導(dǎo)出


[root@localhost ~]# hostnamectl set-hostname elk-1
[root@localhost ~]# bash
[root@elk-1 ~]# vim /etc/hosts ###添加本地解析,識別集群主機(jī)名
192.168.73.40 elk-1
192.168.73.50 elk-2
[root@elk-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@elk-1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
[root@elk-1 ~]# yum install -y elasticsearch java
[root@elk-1 ~]# java -version ###查看Java版本
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17行 集群名稱 ###兩個節(jié)點(diǎn)一致
cluster.name: abner
23行 節(jié)點(diǎn)名稱 ###兩個節(jié)點(diǎn)不同
node.name: elk-1
33行 工作目錄
path.data: /data/es-data
path.logs: /var/log/elasticsearch/
43行 防止交換swap分區(qū)
bootstrap.memory_lock: true
54行 監(jiān)聽網(wǎng)絡(luò)
network.host: 0.0.0.0
58行 端口
http.port: 9200
68行:discovery.zen.ping.unicast.hosts: ["elk-1", "elk-2"] #集群發(fā)現(xiàn)通過單播實(shí)現(xiàn),單播的主機(jī)名為"elk-1","elk-2"
[root@elk-1 ~]# mkdir -p /data/es-data
[root@elk-1 ~]# chown -R elasticsearch.elasticsearch /data/es-data
[root@elk-1 ~]# systemctl start elasticsearch.service
[root@elk-1 ~]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 46814/java


第一種:Java API
第二種:RESTful API (通過json格式交互)
[root@elk-1 ~]# curl -i -XGET 'http://192.168.73.40:9200/_count?pretty' -d '{
> "query": {
> "match_all": {}
> }
> }'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 95
{
"count" : 0,
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
}
}
[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
……省略內(nèi)容
Installed head into /usr/share/elasticsearch/plugins/head ###安裝位置




[root@elk-1 ~]# less /var/log/elasticsearch/abner.log
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
[root@elk-1 ~]# vim /etc/security/limits.conf ###末尾插入
[root@elk-1 ~]# systemctl stop elasticsearch.service
[root@elk-1 ~]# systemctl start elasticsearch.service
[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
……省略內(nèi)容
Installed kopf into /usr/share/elasticsearch/plugins/kopf ###安裝路徑

[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# bash
[root@apache ~]# yum install -y httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# yum install -y java
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
軟件包 1:java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 已安裝并且是最新版本
無須任何處理
[root@apache ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@apache ~]# vi /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
[root@apache ~]# yum install -y logstash
[root@apache ~]# ln -s /opt/logstash/bin/* /usr/local/bin ###優(yōu)化執(zhí)行路徑
Logstash命令選項(xiàng)解釋:
-f:指定logstash的配置文件,根據(jù)配置文件配置logstash
-e:后面跟著字符串,該字符串可以被當(dāng)做logstash的配置(如果是“ ”,則默認(rèn)使用stdin做輸入,stdout為輸出)
-t:測試配置文件是否正確,然后退出
#輸入采用標(biāo)準(zhǔn)輸入,輸出采用標(biāo)準(zhǔn)輸出
定義輸入和輸出流,類似管道
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydeb
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.73.40:9200"] } }'
Settings: Default filter workers: 1
Logstash startup completed
abc123
tom456
123jerry

[root@apache ~]# chmod o+r /var/log/messages ###允許其他用戶訪問
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 439103 11月 18 15:20 /var/log/messages
[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input { ###Logstash輸入:從/var/log/messages輸入,類型為system,起始位
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output { ###Logstash輸出:輸出給Elasticsearch(以IP地址指定位置)
elasticsearch {
hosts => ["192.168.73.40:9200"]
index => "system-%{+YYY.MM.dd}"
}
}
[root@apache ~]# systemctl restart logstash

[root@elk-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@elk-1 ~]# vim kibana-4.3.1-linux-x64/config/kibana.yml
//2行
server.port: 5601
//5行
server.host: "0.0.0.0"
//12行 ES地址
elasticsearch.url: "http://192.168.73.40:9200"
//20行
kibana.index: ".kibana"
yum install screen -y
[root@elk-1 ~]# kibana-4.3.1-linux-x64/bin/kibana ###啟動監(jiān)聽
log [15:43:45.084] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
log [15:43:45.105] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
log [15:43:45.113] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
log [15:43:45.119] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
log [15:43:45.123] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
log [15:43:45.125] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
log [15:43:45.132] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
log [15:43:45.135] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
log [15:43:45.136] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready
log [15:43:45.146] [info][listening] Server running at http://0.0.0.0:5601


原文鏈接:https://blog.csdn.net/weixin_47403060/article/details/109758406 轉(zhuǎn)自:分布式實(shí)驗(yàn)室
![]()
