一環境說明
程序部署路徑/opt/devops/
centos7 64位操作系統
服務器 192.168.80.20
客戶端 192.168.80.10
logstash2.0
elasticsearch-2.0.0
kibana-4.2.0
二安裝前的準備工作
1 關閉防火牆、selinxu
2 安裝redis
#yum install epel-release –y
#yum install redis –y
修改redis配置文件使redis監聽所有ip,默認情況下只監聽127.0.0.01
vi /etc/redis.conf
bind 0.0.0.0
啓動redis
#systemctl restart redis.service
三 logstash(服務端客戶端均需安裝)
1 logstash安裝
參考文檔http://udn.yyuap.com/doc/logstash-best-practice-cn/input/file.html
參考文檔 https://www.elastic.co/guide/en/logstash/current/introduction.html
grok正則測試工具網址爲https://grokdebug.herokuapp.com/
grok正則表達式 https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
第一步:安裝java
logstash2.0版本需要java7及以上版本的支持,如果系統沒有安裝java環境需使用下面的命令進行安裝。
#rpm -ivh jdk-8u51-linux-x64.rpm
#vi /etc/profile.d/java.sh
exportJAVA_HOME="/usr/java/jdk1.8.0_51"
exportJRE_HOME="/usr/java/jdk1.8.0_51/jre/"
export PATH=$JAVA_HOME/bin:$PATH
#source /etc/profile
第二步:安裝logstash
將下載的logstash拷貝到/opt/devops/目錄下
mv logstash-2.0.0 /opt/devops/logstash
第三步:簡單測試
#cd/opt/devops/logstash/
#bin/logstash -e 'input { stdin { } } output { stdout {} }'
顯示啓動完成,手動輸入helloworld測試logstash是否正常啓動
The -e
flagenables you to specify a configuration directly from the command line.Specifying configurations at the command line lets you quickly testconfigurations without having to edit a file between iterations. This pipelinetakes input from the standard input, stdin
, andmoves that input to the standard output, stdout
, in astructured format. Type hello world at the command prompt to see Logstashrespond:
2logstatsh配置
logstatsh默認情況下並沒有區分服務端和客戶端,在此我們人爲的將其分爲服務端和客戶端。客戶端負責收集日誌、按照預定義的正則進行切割日誌並將信息輸出到redis中,客戶端配置文件格式如下,有兩個配置文件input.conf和output.conf組成(當然也可以使用一個配置文件)整個配置文件有三部分組成input(輸入)、filter(過濾)、output(輸出)
2 客戶端配置
客戶端負責收集日誌、切割日誌並將切割後的日誌保存到redis中,我們假設將logstatsh部署在/opt/devops目錄,其配置文件位於/opt/devops/conf目錄
第一步配置詳解
#mkdir –pv /opt/devops/conf
#mkdir –pv /opt/devops/ patterns
#vi input.conf
input {
file {
type =>"apachelog"
tags=>"im/apache"
path =>"/opt/devops/logstash/logs/logstash-tutorial-dataset"
start_position => beginning
sincedb_path => "/opt/devops/logstash/im_nginxlog.sincedb"
}
}
filter {
if [type] == "nginxlog" {
grok {
patterns_dir=> "/opt/devops/logstash/patterns"
match =>{"message"=>"%{COMBINEDAPACHELOG}"}
}
geoip {
source =>"clientip"
}
}
}
解釋:
input段主要負責日誌的收集工作,其主要包含的字段及含義如下
type => "apachelog" type主要用來判斷日誌的類型,例如:此處表示收集的日誌爲apache產生的日誌
tags=> "im/apache" tags主要爲日誌打標籤的,例如:如果多臺apache生成不同的日誌,可以通過tags爲apache日誌打標籤,表示是由哪個應用產生的apahe日誌,此處表示是由im應用產生的日誌
path=> "/opt/devops/logstash/logs/logstash-tutorial-dataset"path用於指定日誌的位置
start_position=> beginning start_position用於指定logstatsh第一次啓動時從什麼地方開始讀取日誌,如果不指定爲start_position => beginning logstatsh收集日誌是從最新的位置開始收集的,類似於tail –f 命令;如果logstatsh並不是第一次啓動還想從頭收集日誌在停止logstatsh後需手動刪除sincedb文件,如果配置文件中不指定sincedb文件的位置,logstatsh啓動後爲在/root/生成一個以.sincedb_開頭的隱藏文件,該文件的主要作用是記錄logstatsh收集日誌的位置logstatsh進程意外關閉,啓動後繼續從該位置收集日誌。
sincedb_path => "/opt/devops/logstash/im_nginxlog.sincedb"sincedb_path指定sincedb文件位置
filter字段主要負責將收集的日誌按照預定義的正則進行日誌切割
grok子段主要是logstatsh的正則部分,其主要包含的字段及含義如下
if [type] == "nginxlog" if [type]子段主要是用於做判斷的,如果滿足要求就執行下面的正則進行日誌切割
grok正則測試工具網址爲https://grokdebug.herokuapp.com/ ,使用該工具需***
match => {"message" => "%{COMBINEDAPACHELOG}"} match表示使用某種正則進行日誌切割
geoip子段的主要作用是通過ip來獲取地理位置,ip必須是日誌切割時通過正則定義的字段
source =>"clientip"souce用來提取日誌切割後的ip地址
#vi output.conf
output {
stdout {}
redis {
host => "172.20.19.113"
port => "6379"
data_type => "list"
key => "logstash"
}
}
解釋:
客戶端logstash的output段主要負責將收集切割後的日誌輸出到redis中進行保存,方便服務端logstash從redis中獲取日誌,其主要包含的字段及含義如下
stdout {}子段表示將切割後的日誌通過標準輸出打印到屏幕上,其主要作用是用來確認logstash是否正常工作,正式上線後可禁用此字段
redis子段表示將切割後的日誌存儲到redis,其主要包含的字段及含義如下
host => "172.20.19.113" host表示redis服務所在主機ip
port => "6379" port表示redis所使用的端口爲6379
data_type => "list" data_type表示將切割後的日誌保存成redis的list類型
key =>"logstash" 表示此日誌在redis的key爲logstatsh(服務端的input段中的key需要和這裏的保持一致)
第二步啓動 logstatsh
假設logstatsh部署在/opt/devops/logstash/,其兩個配置文件input.conf和output.conf均在/opt/devops/logstash/conf
1 測試配置文件是否正確
#/opt/devops/logstash/bin/logstash-f /opt/devops/logstash/conf/ --configtest
2 啓動logstatsh
#nohup/opt/devops/logstash/bin/logstash -f /opt/devops/logstash/conf/ > /dev/null &
2 服務端配置
服務端logstatsh負責從redis獲取數據,並將數據傳遞給elasticsearch,我們假設將logstatsh部署在/opt/devops目錄,其配置文件位於/opt/devops/conf目錄
第一步配置詳解
#vi input.conf
input {
redis{
host => "192.168.80.10"
port => "6379"
type => "redis-input"
data_type => "list"
key => "logstash"
}
}
解釋:
input段主要負責從redis中提取數據,其主要包含的字段及含義如下
redis子段是logstatsh服務端從redis中提取數據的相關配置,其主要包含的字段及含義如下
host => "192.168.80.10"表示redis服務所在服務器ip爲192.168.80.10
port => "6379"表示redis服務的端口爲6379
type => "redis-input" 表示logstatsh是從redis中獲取數據的
data_type => "list"表示存儲在redis切割後的日誌數據類型爲list
key => "logstash"需和客戶端的key保持一致
#output.conf
output {
stdout {}
file {
message_format =>"%{message}"
path => "/opt/logs/%{tags}/%{+YYYY-MM-dd}/%{type}"
}
elasticsearch{
hosts =>["192.168.80.10:9200","192.168.80.20:9200"]
}
}
解釋:
output段主要負責將從redis提取的數據交給elasticsearch進行分析,,其主要包含的字段及含義如下
stdout {}子段表示將獲取的日誌通過標準輸出打印到屏幕上,其主要作用是用來確認logstash是否正常工作,正式上線後可禁用此字段
file子段表示將獲取的日誌保存到文件中,方便以後查看。
elasticsearch子段負責將獲取的日誌交給elasticsearch進行數據分析,其主要包含的字段及含義如下
hosts =>["192.168.80.10:9200","192.168.80.20:9200"] host字段以數組的形式定義elasticsearch集羣各個節點ip及elasticsearch使用的端口
cluster=> "yyuap" cluset用來定義elasticsearch集羣,這裏elasticsearch集羣名稱爲elasticsearch(logstatsh2.0已廢棄)
第二步啓動 logstatsh
假設logstatsh部署在/opt/devops/logstash/,其兩個配置文件input.conf和output.conf均在/opt/devops/logstash/conf
1 測試配置文件是否正確
#/opt/devops/logstash/bin/logstash-f /opt/devops/logstash/conf/ --configtest
2 啓動logstatsh
#nohup /opt/devops/logstash/bin/logstash -f/opt/devops/logstash/conf/ >/var/log/logstash.log &
注意:客戶端logstatsh停止後,如果要再次啓動需要手動刪除/opt/devops/logstash/conf/dump.rdb然後再啓動logstatsh
四 elasticsearch
1 elasticsearch安裝
elasticsearch插件安裝參考文檔
http://www.cnblogs.com/huangfox/p/3541300.html
第一步:安裝java(192.168.80.10和192.168.80.20均需安裝)
elasticsearch2.0版本需要java7及以上版本的支持,如果系統沒有安裝java環境需使用下面的命令進行安裝。
#rpm -ivh jdk-8u51-linux-x64.rpm
#vi /etc/profile.d/java.sh
exportJAVA_HOME="/usr/java/jdk1.8.0_51"
exportJRE_HOME="/usr/java/jdk1.8.0_51/jre/"
export PATH=$JAVA_HOME/bin:$PATH
#source /etc/profile
第二步:安裝elasticsearch(192.168.80.10和192.168.80.20均需安裝)
將下載的elasticsearch拷貝到/opt/devops/目錄下
mv elasticsearch-2.0.0 /opt/devops/elasticsearch
第三步 配置elasticsearch
(1) 192.168.80.10服務器配置
第一步創建mv elasticsearch數據目錄和日誌目錄
mkdir –pv /opt/devops/elasticsearch/data
mkdir –pv /opt/devops/elasticsearch/log
第二步創建elasticsearch運行時所需要的系統賬號
elasticsearch-2.0.0版本禁止使用root賬號直接運行,所以需要創建賬號用於運行elasticsearch
useradd elasticsearch –s /sbin/nologin
第三步修改配置文件
配置文件的位置在/opt/devops/elasticsearch/config/elasticsearch.yml,一個基本的elasticsearch需要做如下配置:
cluster.name: ssfy
位於配置文件的第17行,用於定義集羣名稱
node.name: ssfy-01
位於配置文件的第23行,用於定義集羣節點名稱
path.data: /opt/devops/elasticsearch/data
位於配置文件的第33行,用於定義elasticsearch存儲數據的位置
path.logs: /opt/devops/elasticsearch/log
位於配置文件的第37行,用於定義elasticsearch日誌文件的位置
network.host: 192.168.80.10
位於配置文件的第54行,用於定義elasticsearch偵聽ip,這裏需要配置爲elasticsearch所在服務器ip地址
http.port: 9200
位於配置文件的第58行,用於定義elasticsearch對外使用的端口
discovery.zen.ping.unicast.hosts: ["192.168.80.10", "192.168.80.20"]
位於配置文件的第79行,用於定義elasticsearch發送廣播的ip,默認情況下向elasticsearch所在網段的所以ip進行廣播
node.max_local_storage_nodes: 1
位於配置文件的第92行,用於定義一臺主機只允許啓動一個elasticsearch節點
action.destructive_requires_name: true
位於配置文件的第96行,用於定義刪除索引時必須明確提供索引名
(2) 192.168.80.10服務器配置
第一步創建mv elasticsearch數據目錄和日誌目錄
mkdir –pv /opt/devops/elasticsearch/data
mkdir –pv /opt/devops/elasticsearch/log
第二步創建elasticsearch運行時所需要的系統賬號
elasticsearch-2.0.0版本禁止使用root賬號直接運行,所以需要創建賬號用於運行elasticsearch
useradd elasticsearch –s /sbin/nologin
第三步修改配置文件
配置文件的位置在/opt/devops/elasticsearch/config/elasticsearch.yml,一個基本的elasticsearch需要做如下配置:
cluster.name: ssfy
node.name: ssfy-02
path.data: /opt/devops/elasticsearch/data
path.logs: /opt/devops/elasticsearch/log
network.host: 192.168.80.20
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.80.10", "192.168.80.20"]
node.max_local_storage_nodes: 1
action.destructive_requires_name: true
(3) 啓動elasticsearch
#su – elasticsearch
#nohup/opt/devops/elasticsearch/bin/elasticsearch >/dev/null &
檢驗是否正常啓動
瀏覽器中輸入http://192.168.80.10:9300或者http://192.168.80.20:9300
註釋:elasticsearch集羣內部通信端口爲9300,對外通信端口爲9200
(4) 安裝elasticsearch插件
第一個插件head
elasticsearch-head是一個elasticsearch的集羣管理工具,它是完全由html5編寫的獨立網頁程序,你可以通過插件把它集成到es。
安裝命令:
$/opt/devops/elasticsearch/bin
$./plugin install mobz/elasticsearch-head
安裝完成後\plugins目錄下會有head的文件夾。
進入http://192.168.80.10:9200/_plugin/head/
第二個插件——bigdesk
bigdesk是elasticsearch的一個集羣監控工具,可以通過它來查看es集羣的各種狀態,如:cpu、內存使用情況,索引數據、搜索情況,http連接數等。
安裝命令:
$/opt/devops/elasticsearch/bin
$./plugin install lukas-vlcek/bigdesk
安裝完成後\plugins目錄下會有bigdesk的文件夾。
注意:elasticsearch2.0.0不能通過上面的方法進行安裝,需要手動下載bigdesk放到/opt/devops/elasticsearch/plugins目錄,然後修改兩處配置文件
首先添加配置文件plugin-descriptor.propertie
#vi elasticsearch-2.0.0/plugins/bigdesk/plugin-descriptor.properties
description=bigdesk
version=master
site=true
name=bigdesk
然後,修改配置文件
elasticsearch-2.0.0/plugins/bigdesk/_site/js/store/BigdeskStore.js第142行將major ==1改爲major>= 1
進入http://192.168.80.10:9200/_plugin/bigdesk/ 如下圖
五 kibana
1 kibana安裝
注意:kibana-4.2.0需要elasticsearch2.0.0及以上版本的支持
第一步拷貝軟件包
將下載的elasticsearch拷貝到/opt/devops/目錄下
#mv kibana-4.2.0/opt/devops/kibana
第二步修改kibana配置文件
kibana配置文件只需修改一處即可,我們需要告訴Kibana在哪裏可以找到elasticsearch。打開配置文件並修改elasticsearch參數:
#vi /opt/devops/kibana/config/
elasticsearch.url: "http://192.168.80.10:9200"
elasticsearch.url: http://192.168.80.20:9200
第三步啓動kibana
#nohup /opt/devops/kibana/bin/kibana > /var/log/kibana.log&
第四步測試
kibana端口爲5601
在瀏覽器中輸入
http://192.168.80.10:5601或http://192.168.80.20:5601