ELK已經(jīng)升級(jí)到6了,希望使用6的同學(xué),可以查看Ken同學(xué)的這篇文章
參考:
ELK部署詳解
centos7虛擬機(jī)安裝elasticsearch5.0.x-安裝篇
logstash-best-practice-cn
官網(wǎng)
0 前言
本文主要是基于參考第一篇ELK部署詳解所寫窝剖。另起一篇的目的主要是ELK目前已更新到5.1错英,原文的一些地方需要改動(dòng)题翰;而是正如作者所言,ELK的部署文章非常少淌山,而更新到5.1的更是少,正是作者的無私奉獻(xiàn)顾瞻,自己才能很快完成絕大部分的部署泼疑。故也將自己的部署過程結(jié)合發(fā)布,盡量記錄成all in one荷荤,希望能夠幫助到以后的童鞋部署王浴。
服務(wù)器環(huán)境:
- 主機(jī):2(elk1, elk2)
- 系統(tǒng):CentOS7 Ubuntu 16.04
- 配置:1c2g
- 網(wǎng)絡(luò): 互通(elk1-192.168.204.133梅猿, elk2-192.168.204.129)
- ELK版本:elasticsearch-5.1 kibana-5.1 logstash-5.1 logstash-forwarder-0.4.0 redis-3.2
1 安裝
1.1 java1.8安裝
注意java1.8是必須安裝的版本選擇正確的版本氓辣,CentOS7和Ubuntu16.04都是64位,如果是老版本的操作系統(tǒng)袱蚓,注意查下操作系統(tǒng)的位數(shù)钞啸,然后下載對(duì)應(yīng)的jdk。下載地址
0) 安裝前如果是centos的話喇潘,需要先刪掉對(duì)應(yīng)open-jdk体斩。
1) 對(duì)于Centos可以使用rpm下載進(jìn)行安裝。(提示:wget會(huì)很慢颖低,可以用下載工具或者去CSDN下載)
2)Ubuntu的話絮吵,沒有deb直接安裝,但使用tar安裝發(fā)現(xiàn)更簡(jiǎn)單:
- 下載后忱屑,解壓蹬敲,比如jdk-8u111-linux-x64.tar.gz:
tar -zvxf jdk-8u111-linux-x64.tar.gz
- 移動(dòng)目錄,比如
/usr/java
(**如果不是root用戶莺戒,需使用sudo執(zhí)行伴嗡。同時(shí)所有的安裝最好不要直接使用root用戶 **):
mv jdk1.8.0_111 /usr/java/
- 修改
/usr/java
目錄權(quán)限(之后的elasticsearch和logstash會(huì)放在這個(gè)路徑下,原因后續(xù)說明)
sudo chgrp -R YourUsername /usr/java/
sudo chown -R YourUsername /usr/java
- 配置環(huán)境變量:
CentOS7(使用tar包安裝):比如使用bash从铲,vim ~/.bash_profile
export JAVA_HOME=/usr/java/jdk1.8.0_111 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
Ubuntu16.04:vim ~/.profile
export JAVA_HOME=/usr/java/jdk1.8.0_111 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
(修改完注意登出瘪校,或者使用source 配置文件
生效) - 測(cè)試java版本:
java -version
1.2 安裝elasticsearch
本次安裝是兩臺(tái),elk1作為主節(jié)點(diǎn),elk2為從節(jié)點(diǎn)阱扬。
如果是新手泣懊,建議下載TAR或者ZIP,然后mv
到/usr/java
(原因是如果直接系統(tǒng)起麻惶,你發(fā)現(xiàn)啟動(dòng)了馍刮,但是好像不能訪問啊。用踩。渠退。我最開始拿的CentOS7安裝rpm,發(fā)現(xiàn)elasticsearch和logstash都不好使脐彩。而TAR啟動(dòng)的是bin下的可執(zhí)行文件碎乃,即使出現(xiàn)錯(cuò)誤,也會(huì)有一些提示信息惠奸;另外梅誓,這種方式,配置文件都在路徑下佛南,所以很方便修改配置梗掰;而在/etc
下,很容易改錯(cuò)位置嗅回,也不易記住)
es下載地址
下載完依次:
1) 解壓及穗,并移至/usr/java/
:
unzip elasticsearch-5.1.1.zip
mv elasticsearch-5.1.1 /usr/java
2) 進(jìn)入/usr/java/elasticsearch-5.1.1
,在config
路徑下編輯elasticsearch.yml(配置是yml文件绵载,不是elasticsearch.conf):
主節(jié)點(diǎn)的配置:
node.name: elk-node-1
network.host: elk1
node.master: true
discovery.zen.ping.unicast.hosts: ["elk1", "elk2"]
(注意:node.name只是一個(gè)邏輯名稱埂陆,兩臺(tái)不一樣即可;如果也想像上面network.host是一個(gè)邏輯名字娃豹,請(qǐng)?jiān)趆osts文件進(jìn)行配置才能使用焚虱;否則,請(qǐng)老老實(shí)實(shí)寫本機(jī)IP)
從節(jié)點(diǎn)的配置:
node.name: elk-node-2
network.host: elk2
node.master: false
discovery.zen.ping.unicast.hosts: ["elk1", "elk2"]
(題外:我稍微看了下官方doc懂版,其實(shí)默認(rèn)node.master的true鹃栽,在es集群?jiǎn)?dòng)的時(shí)候,第一臺(tái)作為主節(jié)點(diǎn)躯畴,來進(jìn)行自動(dòng)管理民鼓。)
3)啟動(dòng)elasticsearch:
cd /usr/java/elasticsearch-5.1.1 ./bin/elasticsearch
4)如果不設(shè)置,第一次會(huì)報(bào)一些錯(cuò)誤私股,見參考[centos7虛擬機(jī)安裝elasticsearch5.0.x-安裝篇](呵呵摹察,RPM就不會(huì)這么直接了。所以到這里倡鲸,希望能理解為什么直接用tar或者zip直接安裝。還是講清楚場(chǎng)景黄娘,自己開發(fā)調(diào)試這么可以峭状,生產(chǎn)環(huán)境還是要做好系統(tǒng)啟動(dòng)的配置):
- vm.max_map_count需要調(diào)大:
臨時(shí)修改vm.max_map_count:sudo sysctl -w vm.max_map_count=262144
永久:sudo 編輯 /etc/sysctl.conf克滴,增加vm.max_map_count=262144
- 修改JVM內(nèi)存(默認(rèn)2g,我改為1g)优床,
sudo vim /usr/java/elasticsearch/config/jvm.options
-Xms1g -Xmx1g
- 應(yīng)用打開文件數(shù)不夠大:
vim /etc/security/limits.conf
YourUsername hard nofile 65536 YourUsername soft nofile 65536
重新按照3)啟動(dòng)elasticsearch
如果啟動(dòng)發(fā)現(xiàn)正常劝赔,但是curl測(cè)試不通(默認(rèn)es端口是9200),可能是:
① 有可能network.host
配置的是127.0.0.1
胆敞,官方有解釋道這樣的話es只監(jiān)聽接收本地的9200端口着帽,如果只是單機(jī),可以修改為0.0.0.0
移层,則可監(jiān)聽本地所有地址的請(qǐng)求仍翰。
② 如果是虛機(jī),而且是VirtualBox的話观话,注意開下防火墻予借,不然主機(jī)即使映射,也沒辦法聯(lián)通频蛔。
5)檢測(cè)是否啟動(dòng)成功的方法
① 檢測(cè)是否可以訪問:curl -XGET 'elk1:9200/?pretty'
灵迫,成功返回:
{
"name" : "elk-node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "fU1cY9L2RGO_QHbDNj_Q3A",
"version" : {
"number" : "5.1.1",
"build_hash" : "5395e21",
"build_date" : "2016-12-06T12:36:15.409Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
② 檢測(cè)系統(tǒng)狀態(tài):curl -XGET 'elk1:9200/_cat/health?v&pretty'
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1483811310 01:48:30 elasticsearch green 2 2 12 6 0 0 0 0 - 100.0%
③ 檢測(cè)單一節(jié)點(diǎn)狀態(tài):curl -XGET 'elk1:9200/_cat/nodes?v&pretty'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.204.133 9 85 9 0.03 0.08 0.06 mdi * elk-node-1
192.168.204.129 9 96 0 0.00 0.00 0.00 di - elk-node-2
啟動(dòng)的日志可以在/usr/java/elasticsearch-5.1.1/logs
下查看
1.3 Kibana安裝
下載地址
1) Kibana我只安裝單機(jī),直接使用yum 安裝rpm包
2)配置:可以參考配置以下(技巧:如果和默認(rèn)配置一致晦溪,則那項(xiàng)內(nèi)容可以不進(jìn)行配置瀑粥。比如我實(shí)際只配置了下面的elasticsearch.url和server.host參數(shù)):
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://elk1:9200"
1.4 redis安裝
① redis由于我已安裝,我覺得tar包下載再安裝比較麻煩三圆,而我直接使用yum和apt-get進(jìn)行安裝:
CentOS7:可以從rpmfind下載redis3的包redis-3.2.6-1.el7.remi.x86_64.rpm
Ubuntu16.04:sudo apt-get install redis-server
② 然后啟動(dòng)redis狞换, sudo service redis start
③檢查:redis-cli
是否連通本地server
1.5 安裝logstash
這個(gè)圖必須說一下,因?yàn)榭次臋n你會(huì)經(jīng)诚邮酰看到logstash pipline哀澈,具體這個(gè)是什么,這個(gè)圖一看就明白:
下載地址
下載完依次:
1) 老樣子度气,解壓并
mv
到/usr/java下
2) 為logstash-forwarder進(jìn)行免密配置:
①
vim /etc/pki/tls/openssl.cnf
:# 這塊如果是多個(gè)割按,可以寫成IP1:xxx, IP2:xxx...;注意是在[ v3_ca ]的后面編輯,而不是其他位置 subjectAltName = IP: 127.0.0.1
②生成證書:
$cd /etc/pki/tls $sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
如果在后面的logstash-forwarder報(bào)錯(cuò):
Failed to tls handshake with 127.0.0.1 x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
磷籍,一定注意回去檢查①中的IP配置是否寫在[ v3_ca ]
③如果logstash和logstash-forwarder不是一臺(tái)機(jī)器适荣,需要將生產(chǎn)的證書從logstash拷貝到logstash-forwarder的機(jī)器上:
scp private/logstash-forwarder.key root@target_server_ip:/etc/pki/tls/private
scp certs/logstash-forwarder.crt root@target_server_ip:/etc/pki/tls/certs
3)修改config配置,這里多說一句院领,其實(shí)配置就是和上圖一一對(duì)應(yīng)的弛矛,需要三部分INPUT、FILTER和OUTPUT比然。剛開始FILTER篩選可以忽略丈氓。
此外,[ELK]部署詳解原文,配置了兩個(gè)万俗,其實(shí)相當(dāng)于上圖串行了兩個(gè)logstash pipline湾笛。(千萬不要認(rèn)為redis-input是input,redis-out是output闰歪,其實(shí)他們每一個(gè)都是一個(gè)logstash pipeline)先從logstash-forwarder到redis嚎研,然后redis再到elasticsearch。這個(gè)部分我配置出錯(cuò)了好幾次库倘,千萬注意括號(hào)的對(duì)應(yīng)關(guān)系(vim可以用shift+%
來找到對(duì)應(yīng)的配置)上一份我的配置:
cd /usr/java/logstash-5.1.1/
config/redis-input.yml
input {
lumberjack {
port => 5043
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
filter{
}
output {
redis {
host => "127.0.0.1"
port => 6379
data_type => "list"
key => "logstash:redis"
}
}
config/redis-output.yml
input {
redis {
data_type => "list"
key => "logstash:redis"
host => "127.0.0.1"
port => 6379
}
}
filter{
}
output {
elasticsearch {
hosts => ["elk1:9200"]
index => "%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
# workers => 100 出錯(cuò)临扮,說不支持,暫時(shí)先去掉
template_overwrite => true
}
}
4) 所以如果你直接配置完兩個(gè)教翩,無法啟動(dòng)杆勇,可以依次進(jìn)行啟動(dòng):
cd /usr/java/logstash-5.1.1 ./bin/logstash -f config/redis-input.yml ./bin/logstash -f config/redis-output.yml
5)在[ELK]部署一節(jié),提到自己的腳本迂曲。你可以在logstash-5.1.1的bin目錄新建一個(gè)sh腳本文件靶橱,比如mylogstash.sh:
- 修改文件
conf()
函數(shù)的配置:
function conf()
{
script_name="logstash"
start_command=/usr/java/logstash-5.1.1/bin/logstash
conf_file=/usr/java/logstash-5.1.1/config/redis-input.yml
output_conf=/usr/java/logstash-5.1.1/config/redis-output.yml
log_path=/usr/java/logstash-5.1.1/logs/logstash_output.log
log_input_path=/usr/java/logstash-5.1.1/logs/logstash_input.log
works=2
}
- 賦予執(zhí)行權(quán)限
chmod u+x mylogstash.sh
,然后就可以用比如path/to/logstash/bin/mylogstash.sh [start|stop|...]進(jìn)行一鍵操作
6)而外路捧,如果配置完理解的話关霸,發(fā)現(xiàn)logstash重要的是配置input、output(filter其實(shí)也很常用)杰扫,在logstash中稱為plugins队寇,可以在官方logstash的doc右側(cè)目錄,查找input output filter進(jìn)行查詢章姓。
1.6 logstash-forwarder
為什么要用Logstash Forwarder呢佳遣?看過logstash-best-practice-cn這節(jié)就明白是為了增加安全性。
1) 下載相關(guān)
官方的默認(rèn)都下載鏈接到logstash凡伊,所以需要github看方法進(jìn)行安裝零渐。
2) 配置:看配置是用于文件的監(jiān)控,以下是監(jiān)控logstash和nginx的日志:
/etc/logstash-forwarder.conf
{
# The network section covers network configuration :)
"network": {
# A list of downstream servers listening for our messages.
# logstash-forwarder will pick one at random and only switch if
# the selected one appears to be dead or unresponsive
"servers": [ "127.0.0.1:5043" ],
# The path to your client ssl certificate (optional)
#"ssl certificate": "./logstash-forwarder.crt",
#"ssl certificate": "/etc/pki/tls/certs/logstash-forwarder.crt",
# The path to your client ssl key (optional)
"ssl key": "/etc/pki/tls/private/logstash-forwarder.key",
# The path to your trusted ssl CA file. This is used
# to authenticate your downstream server.
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
# Network timeout in seconds. This is most important for
# logstash-forwarder determining whether to stop waiting for an
# acknowledgement from the downstream server. If an timeout is reached,
# logstash-forwarder will assume the connection or server is bad and
# will connect to a server chosen at random from the servers list.
"timeout": 15
},
# The list of files configurations
"files": [
# An array of hashes. Each hash tells what paths to watch and
# what fields to annotate on events from those paths.
{
"paths": [ "/var/log/message.log"],
"fields": { "type": "logstash" }
},
{
"paths": [ "/var/log/nginx/access.log"],
"fields": { "type": "web1_nginx" }
}
#{
#"paths": [
# single paths are fine
#"/var/log/messages",
# globs are fine too, they will be periodically evaluated
# to see if any new files match the wildcard.
#"/var/log/*.log"
#],
# A dictionary of fields to annotate on each event.
#"fields": { "type": "syslog" }
#}, {
# A path of "-" means stdin.
#"paths": [ "-" ],
#"fields": { "type": "stdin" }
#}, {
#"paths": [
#"/var/log/apache/httpd-*.log"
#],
#"fields": { "type": "apache" }
#}
]
}
3) 啟動(dòng)(我是在CentOS上使用系忙,所以使用sudo service logstash-forwarder start
)
4)題外:看官方推薦使用的叫beats诵盼,看配置和forwarder非常像,所以有興趣可以研究下银还。
1.7 nginx的安裝配置
這個(gè)按照[ELK部署詳解]原文的安裝并配置nginx用于HTTP訪問進(jìn)行配置即可风宁。