新聞中心
一、 簡(jiǎn)介
1.1 介紹
ELK是三個(gè)開源工具組成,簡(jiǎn)單解釋如下:

為振安等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及振安網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、振安網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Elasticsearch是個(gè)開源分布式搜索引擎,它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等。
Logstash是一個(gè)完全開源的工具,它可以對(duì)你的日志進(jìn)行收集、過濾,并將其存儲(chǔ)供以后使用(如,搜索)。
Kibana 也是一個(gè)開源和免費(fèi)的工具,它可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志。
1.2 場(chǎng)景分析
日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志等等。運(yùn)維人員和開發(fā)人員可以通過日志了解服務(wù)器軟硬件信息、檢查配置過程中的錯(cuò)誤及錯(cuò)誤發(fā)生的原因。經(jīng)常分析日志可以了解服務(wù)器的負(fù)荷,性能安全性,從而及時(shí)采取措施糾正錯(cuò)誤。
通常,日志被分散的儲(chǔ)存不同的設(shè)備上。如果你管理數(shù)十上百臺(tái)服務(wù)器,你還在使用依次登錄每臺(tái)機(jī)器的傳統(tǒng)方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當(dāng)務(wù)之急我們使用集中化的日志管理,例如:開源的syslog,將所有服務(wù)器上的日志收集匯總。
集中化管理日志后,日志的統(tǒng)計(jì)和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實(shí)現(xiàn)檢索和統(tǒng)計(jì),但是對(duì)于要求更高的查詢、排序和統(tǒng)計(jì)等要求和龐大的機(jī)器數(shù)量依然使用這樣的方法難免有點(diǎn)力不從心。
這里采用開源實(shí)時(shí)日志分析ELK平臺(tái)能夠完美的解決我們上述的問題,當(dāng)然也還有別的平臺(tái)或者工具可以使用,這里只討論ELK,官方網(wǎng)站:https://www.elastic.co
二、安裝Elasticsearch
2.1 安裝jdk
# Java -version
java version
"1.8.0_121"
Java(TM) SE Runtime Environment (build
1.8
.
0_121
-
b13)
Java HotSpot(TM)
64
-
Bit Server VM (build
25.121
-
b13, mixed mode)
2.2 安裝Elasticsearch
# tar -zxvf elasticsearch-5.6.3.tar.gz
# mv elasticsearch-5.6.3 /data/elasticsearch
# cd elasticsearch/config/
# 備份配置文件
# cp elasticsearch.yml elasticsearch.yml.bak
編輯配置文件
# cat elasticsearch.yml | grep -v ^#
cluster.name: elk
-
application
node.name: node
-
1
path.data:
/
data
/
elasticsearch
/
data
path.logs:
/
data
/
elasticsearch
/
logs
network.host:
172.16
.
220.248
http.port:
9200
discovery.zen.ping.unicast.hosts: [
"node-1"
]
discovery.zen.minimum_master_nodes:
1
添加elasticsearch用戶,不能使用root啟動(dòng)
# groupadd -g 1008 elasticsearch
# useradd -g 1008 -u 1008 elasticsearch
# chown -R elasticsearch:elasticsearch /data/elasticsearch/
修改sysctl.conf文件
# vim /etc/sysctl.conf
vm.max_map_count
=
262144
# sysctl -p
修改/etc/security/limits.conf文件,修改打開文件句柄
*
soft nofile
100000
*
hard nofile
100000
*
soft nproc
100000
*
hard nproc
100000
添加hosts文件
# vim /etc/hosts
172.16
.
220.248
node
-
1
啟動(dòng)
# su -s elasticsearch
# cd /data/elasticsearch/bin
# ./elasticearch &
查看是否啟動(dòng)
簡(jiǎn)單的curl測(cè)試
# curl http://172.16.220.248:9200
三、安裝Logstash和filebeat
filebeat用于在各個(gè)服務(wù)器上獲取數(shù)據(jù),發(fā)送到logstash上,再由logstash處理數(shù)據(jù)。
3.1 安裝logstash
# tar -zxvf logstash-5.6.3.tar.gz
# mv logstash-5.6.3 /data/logstash
3.2 安裝filebeat
下載filebeat并啟動(dòng),通過它來監(jiān)聽數(shù)據(jù)源文件的新增內(nèi)容經(jīng)過logstash處理后上傳到es里面
# tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz
# mv filebeat-5.6.3-linux-x86_64 /data/filebeat
# cd /data/filebeat
# cp filebeat.yml filebeat.yml.bak
編輯filebeat.yml文件
filebeat.prospectors:
-
input_type: log
paths:
-
/
var
/
log
/
message
-
log
# 測(cè)試本機(jī)的一個(gè)log文件
output.logstash:
hosts: [
"172.16.220.248:5044"
]
啟動(dòng)filebeat服務(wù)
# cd /data/filebeat
# ./filebeat &
查看啟動(dòng),filebeat沒有監(jiān)聽端口,主要看日志和進(jìn)程
# tialf logs/filebeat
# ps -ef | grep filebeat
filebeat監(jiān)聽的文件記錄信息在/data/filebeat/data/registry
新建一個(gè)本地文件message-log,可以取幾條本機(jī)系統(tǒng)的messages文件
3.3 啟動(dòng)logstash
最后新建一個(gè)logstash的啟動(dòng)指定test.conf配置文件,內(nèi)容如下:
input
{
beats {
port
=
>
"5044"
}
}
output {
elasticsearch {
hosts
=
>
"172.16.220.248:9200"
}
stdout { codec
=
> rubydebug }
# 這是將輸出打印在屏幕上,可以注釋掉
}
Logstash默認(rèn)有input、filter、output三個(gè)區(qū)域,一般最少需要配置input和output即可!
logstash的本身默認(rèn)的logstash.yml配置文件選擇不修改即可!
簡(jiǎn)單測(cè)試一下logstash不指定配置文件啟動(dòng)
# cd /data/filebeat/bin
# ./logstash -e 'input { stdin {} } output {stdout {} }'
我們手動(dòng)輸入 hello world,它也會(huì)輸出 hello world
指定配置文件啟動(dòng)logstash
# ./logstash -f ../config/test.conf &
查看5044端口和9600端口是否開啟
等待一會(huì)后應(yīng)該會(huì)出現(xiàn)如下信息輸出,這也就是test.conf里面最后一行定義輸出到屏幕上
四、安裝kibana
# tar -zxvf kibana-5.6.3-linux-x86_64.tar.gz
# mv kibana-5.6.3-linux-x86_64 /data/kinbana
# cd /data/kinbana/config/
# cp kibana.yml kibana.yml.bak
編輯kibana.yml配置文件
# vim kibana.yml
server.port:
5601
server.host:
"172.16.220.248"
elasticsearch.url:
"http://172.16.220.248:9200"
啟動(dòng)kinbana
# cd /data/kibana/bin
# ./kibana &
查看端口
瀏覽器登入查看
點(diǎn)擊create按鈕后,然后點(diǎn)擊上面的discover按鈕,注意如果沒數(shù)據(jù)的話,注意看看導(dǎo)入的時(shí)間@timestamp和現(xiàn)在的時(shí)間對(duì)比一下,kibana默認(rèn)只顯示最近15分鐘的數(shù)據(jù),如果超出15分鐘請(qǐng)選擇適當(dāng)?shù)臅r(shí)間,從kibana可以看到messages-log里面的15條數(shù)據(jù)都正常導(dǎo)入了。這就也完成我們的實(shí)現(xiàn)的第一個(gè)效果。但是這僅僅是把流程跑通了,接下來我們需要做的事情還有更多。注意只能先導(dǎo)入數(shù)據(jù)到es后才能在kibana創(chuàng)建索引。
五、獲取Nginx access日志
Nginx日志格式在logstash的grok里面默認(rèn)是沒有的,需要我們手動(dòng)配置,可以通過http://grokdebug.herokuapp.com/ 在線工具來判斷配置是否正確。
5.1 在nginx服務(wù)器上安裝filebeat
服務(wù)器: 172.16.200.160
# tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz
# mv filebeat-5.6.3-linux-x86_64 /data/filebeat
# cd /data/filebeat
# cp filebeat.yml filebeat.yml.bak
修改filebeat配置文件
# cat filebeat.yml | grep -v ^$ | grep -v ^# | grep -v "#"
filebeat.prospectors:
- input_type: log
paths:
- /data/nginx/logs/160_access.log
document_type: nginx_access
output.logstash:
hosts: ["172.16.220.248:5044"]
啟動(dòng)filebeat
# ./filebeat &
5.2 重新配置logstash啟動(dòng)配置文件
nginx日志格式,根據(jù)業(yè)務(wù)要求,我們這做了一些修改,比如增加cookie等,修改access.log日志時(shí)間格式等,這個(gè)會(huì)在另外的博客中寫出來,會(huì)給出鏈接的。
Nginx日志格式??
log_format main
'[$time_local] - $remote_addr:$remote_port - $upstream_addr $upstream_status $upstream_response_time - '
'"$request" $status $bytes_sent $request_time '
'"$http_referer" - "$http_user_agent" - '
'"$customerTag_cookie" - "$ym_cookie" - "$http_cookie" '
'"$http_x_forwarded_for"';
# 這里只是我們自己的格式,各位可以根據(jù)自己要求增刪
grok使用表達(dá)式
可能我理解不是很到位,寫的也比較復(fù)雜,我會(huì)把匹配對(duì)應(yīng)項(xiàng)一一寫出來,大家可以自己理解,然后為自己的項(xiàng)目配置
%{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip}
grok匹配說明
|
時(shí)間格式 | ||
|
獲取ip,clientip是自己命名的 | ||
|
NUMBER匹配數(shù)字 | ||
|
INT整形 | ||
|
WORD單詞 | ||
|
獲取請(qǐng)求內(nèi)容request | ||
|
QS可以獲取一段字符串 |
修改logstash啟動(dòng)配置文件
input {
beats {
port => "5044"
}
}
filter {
if [type] == "nginx_access" {
grok {
match => {"message" => "%{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip}"}
}
mutate {
remove_field => "message" # 把message字段去掉,它會(huì)將上面單項(xiàng)獲取的信息做個(gè)匯總,這樣就重復(fù)了
}
}
}
output {
elasticsearch {
hosts => "172.16.220.248:9200"
}
#stdout { codec => rubydebug }
}
測(cè)試一下配置文件
./logstash -t -f ../config/logstash.conf
重啟logstash
不出問題elasticsearch 和kibana中就會(huì)有數(shù)據(jù)了
當(dāng)前文章:CentOS7單機(jī)部署ELK
標(biāo)題網(wǎng)址:http://fisionsoft.com.cn/article/coepppj.html


咨詢
建站咨詢
