ELK(ElasticSearch+Logstash+ Kibana)搭建实时日志分析平台
來源:http://www.cnblogs.com/zclzhao/p/5749736.html
一、簡介
????? ELK 由三部分組成elasticsearch、logstash、kibana,elasticsearch是一個近似實時的搜索平臺,它讓你以前所未有的速度處理大數據成為可能。
????? Elasticsearch所涉及到的每一項技術都不是創新或者革命性的,全文搜索,分析系統以及分布式數據庫這些早就已經存在了。它的革命性在于將這些獨立且有用的技術整合成一個一體化的、實時的應用。Elasticsearch是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之一。
??????應用程序的日志大部分都是輸出在服務器的日志文件中,這些日志大多數都是開發人員來看,然后開發卻沒有登陸服務器的權限,如果開發人員需要查看日志就需要到服務器來拿日志,然后交給開發;試想下,一個公司有10個開發,一個開發每天找運維拿一次日志,對運維人員來說就是一個不小的工作量,這樣大大影響了運維的工作效率,部署ELKstack之后,開發任意就可以直接登陸到Kibana中進行日志的查看,就不需要通過運維查看日志,這樣就減輕了運維的工作。
????? 日志種類多,且分散在不同的位置難以查找:如LAMP/LNMP網站出現訪問故障,這個時候可能就需要通過查詢日志來進行分析故障原因,如果需要查看apache的錯誤日志,就需要登陸到Apache服務器查看,如果查看數據庫錯誤日志就需要登陸到數據庫查詢,試想一下,如果是一個集群環境幾十臺主機呢?這時如果部署了ELKstack就可以登陸到Kibana頁面進行查看日志,查看不同類型的日志只需要電動鼠標切換一下索引即可。
Logstash:日志收集工具,可以從本地磁盤,網絡服務(自己監聽端口,接受用戶日志),消息隊列中收集各種各樣的日志,然后進行過濾分析,并將日志輸出到Elasticsearch中。
Elasticsearch:日志分布式存儲/搜索工具,原生支持集群功能,可以將指定時間的日志生成一個索引,加快日志查詢和訪問。
Kibana:可視化日志Web展示工具,對Elasticsearch中存儲的日志進行展示,還可以生成炫麗的儀表盤。
?
二、安裝部署(因為我是測試環境,就將ElasticSearch+Logstash+ Kibana裝在一臺虛擬機上面了)
安裝jdk
rpm -ivh jdk-8u92-linux-x64.rpm
vi /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_92/
source /etc/profile
echo $JAVA_HOME????
/usr/java/jdk1.8.0_92/
java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
安裝elasticsearch
rpm --import?https://packages.elastic.co/GPG-KEY-elasticsearch
添加yum文件
echo "
[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
enabled=1" >> /etc/yum.repos.d/elasticsearch.repo
yum install elasticsearch -y
mkdir /data/elk/{data,logs}
Type ?????????? Description ??????????????????????? ?Location
home ???? elasticsearch安裝的目錄 ?????????? {extract.path}
bin ???????? elasticsearch二進制腳本目錄 ???? {extract.path}/bin
conf ???????? 配置文件目錄 ??????????????????????? {extract.path}/config
data?????????? 數據目錄 ???????????????????????? ? {extract.path}/data
logs ????????? 日志目錄?????????????????????????????{extract.path}/logs
plugins ???? 插件目錄?????????????????????????????{extract.path}/plugin
配置說明:
vi /etc/elasticsearch/elasticsearch.yml
cluster.name: es
path.data: /data/elk/data
path.logs: /data/elk/logs
bootstrap.mlockall: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.2.215", "host2"]
啟動:
/etc/init.d/elasticsearch start
http://192.168.2.215:9200/
elasticsearch的config文件夾里面有兩個配置文件:elasticsearch.yml和logging.yml,
第一個是es的基本配置文件,第二個是日志配置文件,es也是使用log4j來記錄日志的,所以logging.yml里的設置按普通log4j配置文件來設置就行了。下面主要講解下elasticsearch.yml這個文件中可配置的東西。
cluster.name:elasticsearch
配置es的集群名稱,默認是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
node.name:”FranzKafka”
節點名,默認隨機指定一個name列表中名字,該列表在es的jar包中config文件夾里name.txt文件中,其中有很多作者添加的有趣名字。
node.master:true
指定該節點是否有資格被選舉成為node,默認是true,es是默認集群中的第一臺機器為master,如果這臺機掛了就會重新選舉master。
node.data:true
指定該節點是否存儲索引數據,默認為true。
index.number_of_shards:5
設置默認索引分片個數,默認為5片。
index.number_of_replicas:1
設置默認索引副本個數,默認為1個副本。
path.conf:/path/to/conf
設置配置文件的存儲路徑,默認是es根目錄下的config文件夾。
path.data:/path/to/data
設置索引數據的存儲路徑,默認是es根目錄下的data文件夾,可以設置多個存儲路徑,用逗號隔開,例:
path.data:/path/to/data1,/path/to/data2
path.work:/path/to/work
設置臨時文件的存儲路徑,默認是es根目錄下的work文件夾。
path.logs:/path/to/logs
設置日志文件的存儲路徑,默認是es根目錄下的logs文件夾
path.plugins:/path/to/plugins
設置插件的存放路徑,默認是es根目錄下的plugins文件夾
bootstrap.mlockall:true
設置為true來鎖住內存。因為當jvm開始swapping時es的效率會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,并且保證機器有足夠的內存分配給es。同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過`ulimit-lunlimited`命令。
network.bind_host:192.168.0.1
設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0。network.publish_host:192.168.0.1
設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址。
network.host:192.168.0.1
這個參數是用來同時設置bind_host和publish_host上面兩個參數。
transport.tcp.port:9300
設置節點間交互的tcp端口,默認是9300。
transport.tcp.compress:true
設置是否壓縮tcp傳輸時的數據,默認為false,不壓縮。
http.port:9200
設置對外服務的http端口,默認為9200。
http.max_content_length:100mb
設置內容的最大容量,默認100mb
http.enabled:false
是否使用http協議對外提供服務,默認為true,開啟。
gateway.type:local
gateway的類型,默認為local即為本地文件系統,可以設置為本地文件系統,分布式文件系統,hadoop的HDFS,和amazon的s3服務器,其它文件系統的設置方法下次再詳細說。
gateway.recover_after_nodes:1
設置集群中N個節點啟動時進行數據恢復,默認為1。
gateway.recover_after_time:5m
設置初始化數據恢復進程的超時時間,默認是5分鐘。
gateway.expected_nodes:2
設置這個集群中節點的數量,默認為2,一旦這N個節點啟動,就會立即進行數據恢復。
cluster.routing.allocation.node_initial_primaries_recoveries:4
初始化數據恢復時,并發恢復線程的個數,默認為4。
cluster.routing.allocation.node_concurrent_recoveries:2
添加刪除節點或負載均衡時并發恢復線程的個數,默認為4。
indices.recovery.max_size_per_sec:0
設置數據恢復時限制的帶寬,如入100mb,默認為0,即無限制。
indices.recovery.concurrent_streams:5
設置這個參數來限制從其它分片恢復數據時最大同時打開并發流的個數,默認為5。
discovery.zen.minimum_master_nodes:1
設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對于大的集群來說,可以設置大一點的值(2-4)
discovery.zen.ping.timeout:3s
設置集群中自動發現其它節點時ping連接超時時間,默認為3秒,對于比較差的網絡環境可以高點的值來防止自動發現時出錯。
discovery.zen.ping.multicast.enabled:false
設置是否打開多播發現節點,默認是true。
discovery.zen.ping.unicast.hosts:[“host1″,”host2:port”,”host3[portX-portY]”]
設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點
安裝head插件(集群管理插件)
cd /usr/share/elasticsearch/bin/
./plugin install mobz/elasticsearch-head
ll /usr/share/elasticsearch/plugins/head
http://192.168.2.215:9200/_plugin/head/
安裝kopf插件(集群資源查看和查詢插件)
/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
http://192.168.2.215:9200/_plugin/kopf
啟動elasticearch
/etc/init.d/elasticsearch start
安裝kibana
kibana本質上是elasticsearch web客戶端,是一個分析和可視化elasticsearch平臺,可通過kibana搜索、查看和與存儲在elasticsearch的索引進行交互。可以很方便的執行先進的數據分析和可視化多種格式的數據,如圖表、表格、地圖等。
Discover頁面:交互式的瀏覽數據。可以訪問所匹配的索引模式的每個索引的每個文檔。可以提交搜索查詢,過濾搜索結果和查看文檔數據。還可以搜索查詢匹配的文檔數據和字段值的統計數據。還可以選定時間以及刷新頻率
https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz
tar zxvf kibana-4.5.1-linux-x64.tar.gz
mv kibana-4.5.1-linux-x64 /usr/local/
vi /etc/rc.local
/usr/local/kibana-4.5.1-linux-x64/bin/kibana > /var/log/kibana.log 2>&1 &
vi /usr/local/kibana-4.5.1-linux-x64/config/kibana.yml
server.port: 5601
server.host: "192.168.2.215"
elasticsearch.url: "http://192.168.2.215:9200"
將nginx日志轉換成json
vim /usr/local/nginx/conf/nginx.conf
log_format access1 '{"@timestamp":"$time_iso8601",'
??????? '"host":"$server_addr",'
??????? '"clientip":"$remote_addr",'
??????? '"size":$body_bytes_sent,'
??????? '"responsetime":$request_time,'
??????? '"upstreamtime":"$upstream_response_time",'
??????? '"upstreamhost":"$upstream_addr",'
??????? '"http_host":"$host",'
??????? '"url":"$uri",'
??????? '"domain":"$host",'
??????? '"xff":"$http_x_forwarded_for",'
??????? '"referer":"$http_referer",'
??????? '"status":"$status"}';
??? access_log? /var/log/nginx/access.log? access1;
重新載入nginx
/usr/local/nginx/sbin/nginx -s reload
安裝logstash
在logstash中,包括了三個階段:
輸入input --> 處理filter(不是必須的) --> 輸出output
rpm --import?https://packages.elastic.co/GPG-KEY-elasticsearch
echo "
[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
enabled=1" >> /etc/yum.repos.d/logstash.repo
yum install logstash -y
通過配置驗證Logstash的輸入和輸出
vim /etc/logstash/conf.d/stdout.conf
input {
??????? stdin {}
}
output {
??????? stdout {
??????????????? codec => "rubydebug"
??????? }
}
vim /etc/logstash/conf.d/logstash.conf
input {
??????? stdin {}
}
input {
??????? stdin {}
?}
output {
??????? elasticsearch {
??????????????? hosts => ["192.168.2.215:9200"]
??????????????? index => "test"
??????? }
}
http://192.168.2.215:9200/_plugin/head/
vim /etc/logstash/conf.d/logstash.conf?
output {
??????? elasticsearch {
??????????????? hosts => ["192.168.2.215:9200"]
??????????????? index => "test"
??????? }
input {
??????? file {?
????????? type => "messagelog"
????????? path => "/var/log/messages"
????????? start_position => "beginning"
??????? }
}
output {
??????? file {
????????? path => "/tmp/123.txt"
??????? }
??????? elasticsearch {
??????????????? hosts => ["192.168.2.215:9200"]
??????????????? index => "system-messages-%{+yyyy.MM.dd}"
??????? }
}
檢查配置文件語法
/etc/init.d/logstash configtest
vim /etc/init.d/logstash
LS_USER=root
LS_GROUP=root
總結
以上是生活随笔為你收集整理的ELK(ElasticSearch+Logstash+ Kibana)搭建实时日志分析平台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网贷逾期和信用卡逾期哪个严重
- 下一篇: 简单理解AOP(面向切面编程)