ELK日誌分析系統部署

ELK介紹
 
環境的困境:
  一、開發人員不能登陸線上服務器查看詳細的日誌
  二、各個系統都有日誌,日誌數據分散難以查找
  三、日誌數據量大,查詢速度慢,或者數據不夠實時
 
ELK Stack解決方案:
  Elastic Search(對日誌進行存儲搜索) + LogStash(對日誌進行蒐集) + Kibana(圖形化展現) = ELK Stack
 
 
Elasticsearch部署
  IP:192.168.88.1
 
一、安裝JDK
# tar zxf jdk-8u101-linux-x64.tar.gz -C /opt/
# vim /etc/profile.d/java.sh
	export JAVA_HOME=/opt/jdk1.8.0_101
	export JAVA_BIN=/opt/jdk1.8.0_101/binls
	export PATH=$PATH:$JAVA_HOME/bin
	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
	export JAVA_HOME JAVA_BIN PATH CLASSPATH
# source  /etc/profile.d/java.sh 
# java -version
二、建立普通用戶
# useradd heboan
# passwd heboan
三、以普通用戶heboan安裝Elasticsearch
# tar zxf elasticsearch-5.2.0.tar.gz -C /opt/
# cd /opt/
# ln -s elasticsearch-5.2.0/ elasticsearch
# chown -R heboan elasticsearch-5.2.0 elasticsearch
# su heboan
$ tree -L 1
	.
	├── bin 		//運行Elasticsearch實例和管理插件的一些腳本
	├── config		//配置文件路徑,包含Elastichsearch.yml基本配置文件
	├── lib			//Elasticsearch使用的庫
	├── LICENSE.txt
	├── modules
	├── logs 		//日誌目錄
	├── NOTICE.txt
	├── plugins            //插件安裝目錄
	└── README.textile

四、改下配置文件/opt/elasticsearch/config/elasticsearch.ymljava

cluster.name: my-application   //集羣名字
node.name: node-88.1           //節點名字
path.data: /data/es-data       //數據存放路徑,確保建立此目錄
# mkdir -p /data/es-data
# chown -R heboan /data/es-data
network.host: 192.168.88.1
http.port: 9200

	----官方建議進行的配置說明------------
	雖然Elasticsearch僅須要不多的配置,但有一些設置須要手動配置,而且在進入生產以前進行配置
☻ path.data 和 path.logs
	#若是使用.zip或.tar.gz安裝文件,則data和logs目錄是在目錄$ES_HOME中。若是這些重要的文件夾保留在默認位置,則在將Elasticsearch升級到新版本時存在將其刪除的高風險
☻ cluster.name
	#節點只能cluster.name在與集羣中全部其餘節點共享集羣時才加入集羣。咱們應該將其更改成描述集羣用途的適當名稱
☻ node.name
	#默認狀況下,Elasticsearch將使用隨機生成的UUID的第一個字符做爲節點ID,節點ID是持久的,重啓不會更改,咱們應該配置一個更有意義的名稱
☻ bootstrap.memory_lock
	#對節點的健康相當重要,沒有一個JVM被交換到磁盤,一種實現方法是將bootstrap.memory_lock設置設置爲true
☻ network.host
	#默認狀況下,Elasticsearch僅綁定到環回地址,爲了與其餘服務器帶上的節點進行通訊和造成集羣,咱們須要將節點綁定到非環回地址
☻ discovery.zen.ping.unicast.hosts
 #當與其餘服務器的節點造成集羣時,咱們必須提供集羣中多是活動和可聯繫的其餘節點列表
☻ discovery.zen.minimum_master_nodes
	#爲了防止數據丟失,此配置相當重要,爲了不腦裂,此設置應該設置爲主合格節點的法定 數量(master_eligible_nodes / 2)+1,
         換句話說,若是有三個主合格節點,則最小主節點應設置爲(3 / 2 ) + 1或2: discovery.zen.minimum_master_nodes:2
五、啓動Elasticsearch
$ /opt/elasticsearch/bin/elasticsearch -d      //-d 表示在後臺運行
>>啓動報錯,日誌以下
	   bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
	   ERROR: bootstrap checks failed
	   max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
	   max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

>>解決辦法
	   切換到root用戶修改配置sysctl.conf
	   # vi /etc/sysctl.conf
		vm.max_map_count=655360
	   # sysctl -p
	   # echo "* soft nofile 65536" >>/etc/security/limits.conf
	   # echo "* hard nofile 65536" >>/etc/security/limits.conf
	   修改後從新登陸heboan用戶,使用以下命令查看是否修改爲功
	   $ ulimit -Hn
	   65536
六、查看監聽的端口,咱們發現啓動了端口9200,9300
$ netstat -lntp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 192.168.88.1:9200       :::*                    LISTEN      2428/java           
tcp6       0      0 192.168.88.1:9300       :::*                    LISTEN      2428/java           
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:25                  :::*                    LISTEN      -       
七、訪問9200端口
$ curl 192.168.88.1:9200
{
      "name" : "node-88.1",
      "cluster_name" : "my-application",
      "cluster_uuid" : "5j87qZ4dS9uBIoZc0CEseg",
      "version" : {
  	    "number" : "5.2.0",
    	    "build_hash" : "24e05b9",
    	    "build_date" : "2017-01-24T19:52:35.800Z",
    	    "build_snapshot" : false,
     	    "lucene_version" : "6.4.0"
           },
  	"tagline" : "You Know, for Search"
     }
八、按照以上步驟在192.168.88.2上部署Elasticsearch,這樣咱們能夠創建一個集羣
/opt/elasticsearch/config/elasticsearch.yml更改以下:
	cluster.name: my-application   //集羣名字
	node.name: node-88.2          //節點名字
	path.data: /data/es-data       //數據存放路徑,確保建立此目錄
	# mkdir -p /data/es-data
	# chown -R heboan /data/es-data
	network.host: 192.168.88.2
	http.port: 9200
	discovery.zen.ping.unicast.hosts: ["192.168.88.1", "192.168.88.2"]    在192.168.88.1也修改此配置,內容同樣
	部署過程當中遇到問題請參考192.168.88.1解決方案

九、查看集羣狀態node

$ curl -XGET 'http://192.168.88.1:9200/_cluster/health?pretty'
{
  	"cluster_name" : "my-application",
  	"status" : "green",
  	"timed_out" : false,
  	"number_of_nodes" : 2,
  	"number_of_data_nodes" : 2,
  	"active_primary_shards" : 0,
  	"active_shards" : 0,
  	"relocating_shards" : 0,
  	"initializing_shards" : 0,
  	"unassigned_shards" : 0,
  	"delayed_unassigned_shards" : 0,
  	"number_of_pending_tasks" : 0,
  	"number_of_in_flight_fetch" : 0,
  	"task_max_waiting_in_queue_millis" : 0,
  	"active_shards_percent_as_number" : 100.0
}

 

 

logstash部署
 
一、安裝JDK
# tar zxf jdk-8u101-linux-x64.tar.gz -C /opt/
# vim /etc/profile.d/java.sh
	export JAVA_HOME=/opt/jdk1.8.0_101
	export JAVA_BIN=/opt/jdk1.8.0_101/binls
	export PATH=$PATH:$JAVA_HOME/bin
	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
	export JAVA_HOME JAVA_BIN PATH CLASSPATH
# source  /etc/profile.d/java.sh 
# java -version
二、安裝
YUM安裝下載並安裝公共簽名密鑰
	# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
例如/etc/yum.repos.d/,在具備.repo後綴的文件中的目錄中添加如下內容logstash.repo
	[logstash-5.x]
	name=Elastic repository for 5.x packages
	baseurl=https://artifacts.elastic.co/packages/5.x/yum
	gpgcheck=1
	gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
	enabled=1
	autorefresh=1
	type=rpm-md	
能夠安裝
	$sudo yum install logstash

由於使用YUN安裝網絡慢的緣由,這裏我使用二進制包安裝
	☻下載並解壓logstash
		# tar zxf logstash-5.2.0.tar.gz -C /opt/
		# cd /opt/
		# ln -s logstash-5.2.0 logstash
		# chown -R heboan logstash*
		# su heboan
	☻準備logstash.conf配置文件
	☻運行 bin/logstash -f logstash.conf
三、運行Logstash管道測試logstashan安裝
一個Logstash管道有兩個必需的元素,input和output,和一個可選的元素filter.輸入插件從源消耗數據,過濾器插件根據咱們指定的內容修改數據,輸出插件將數據寫入目標。
>>運行最基本的管道:
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {stdout {}}'
-e表示直接從命令行指定配置,上面的管道是從標準輸入stdin,並將該輸入以stdout結構化格式移動到標準輸出,
啓動Logstash後,請等待,直到看到"Successfully started Logstash API endpoint {:port=>9600}",而後在命令提示符處輸入:
hello heboan
2017-02-15T10:21:08.599Z host-2.heboan.com hello heboan
my name is heboan
2017-02-15T10:21:22.909Z host-2.heboan.com my name is heboan
這樣咱們已建立並運行基本的logstash管道了
 
>>更直觀的展現信息
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {stdout {codec => rubydebug}}'
hello heboan
{
    "@timestamp" => 2017-02-15T10:31:46.127Z,
      "@version" => "1",
          "host" => "0.0.0.0",
       "message" => "hello heboan"
}

 

>>如今咱們就將輸出到Elasticsearch
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {elasticsearch {hosts => ["192.168.88.1:9200"]}}'
hello heboan
如今咱們來查看192.168.88.1上面Elasticsearch的索引全部列表
$ curl '192.168.88.1:9200/_cat/indices?v'
health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash-2017.02.15 wLuFEV4rRsS87DruuoX6fQ   5   1          1            0      4.6kb          4.6kb
咱們發現有一個索引logstash-2017.02.15
刪除索引
$ curl -XDELETE  '192.168.88.1:9200/logstash-2017.02.15'

 

 

Kibana部署
 
一、解壓安裝
# tar zxf kibana-5.2.0-linux-x86_64.tar.gz -C /opt/
# cd /opt/
# ln -s kibana-5.2.0-linux-x86_64 kibana
# chown -R heboan kibana*
二、目錄佈局
tar.gz安裝包是徹底獨立的。默認狀況下,全部文件和目錄都包含在$KIBANA_HOME(解壓時建立的目錄)中,這是很是方便的,由於
咱們沒必要建立任何目錄開始使用Kibana,卸載$KIBANA_HOME就像刪除目錄同樣簡單。可是,建議更改配置和數據目錄的默認位置,以便
之後不會刪除重要數據
# cd kibana
# tree -L 1
.
├── bin                          //二進制腳本包括kibana啓動Kibana 服務器和kibana-plugin安裝插件
├── config			 //配置文件
├── data			 //Kibana及其插件寫入磁盤的數據文件的位置
├── LICENSE.txt
├── node
├── node_modules
├── optimize			 //Transpiled源代碼。某些管理操做(例如插件安裝)致使源代碼被即時從新轉換
├── package.json
├── plugins			 //插件文件位置。每一個插件都將包含在一個子目錄中
├── README.txt
├── src
├── ui_framework
└── webpackShims
三、配置Kibana
Kibana服務器kibana.yml在啓動時從文件讀取屬性。默認配置kibana運行localhost:5601。要更改主機或端口號,或鏈接到在不一樣計算機
上運行的Elasticsearch,咱們須要更新kibana.yml文件。咱們還能夠啓用SSL並設置各類其餘選項。
/opt/kibana/config/kibana.yml
server.port: 默認值:5601 Kibana由後端服務器提供服務。此設置指定要使用的端口
server.host: 默認值:「localhost」此設置指定後端服務器的主機               //這裏我把kibana安裝在88.1上面,因此我指定了IP:192.168.88.1
server.basePath: 使您可以指定一個路徑來掛載Kibana在若是你在代理後面運行。這隻影響Kibana生成的URL,
您的代理應該在將請求轉發到Kibana以前刪除basePath值。此設置不能以斜槓(/)結尾
server.maxPayloadBytes: 默認值:1048576傳入服務器請求的最大有效負載大小(以字節爲單位)
server.name: 默認值:「your-hostname」用於標識此Kibana實例的可讀的顯示名稱
server.defaultRoute: 默認值:「/ app / kibana」此設置指定打開Kibana時的默認路由,
您可使用此設置在打開Kibana時修改着陸頁
elasticsearch.url: 默認值:「http:// localhost:9200」要用於全部查詢的Elasticsearch實例的URL     //這裏我改成http://192.168.88.1:9200
elasticsearch.preserveHost: 默認值:true當此設置的值爲true時Kibana使用server.host設置中指定的主機名,
當此設置的值爲時false,Kibana使用鏈接到此Kibana實例的主機的主機名
kibana.index: 默認值:「.kibana」Kibana使用 Elasticsearch中的索引來存儲保存的搜索,
可視化和儀表板。若是索引不存在,Kibana將建立一個新索引
kibana.defaultAppId: 默認值:「discover」要加載的默認應用程序
tilemap.url: Kibana用於在tilemap可視化中顯示地圖圖塊的圖塊服務的URL。
默認狀況下,Kibana從外部元數據服務讀取此URL,但用戶仍能夠覆蓋此參數以使用本身的Tile Map Service。
例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"
tilemap.options.minZoom: 默認值:1最小縮放級別
tilemap.options.maxZoom: 默認值:10最大縮放級別
tilemap.options.attribution: 默認:"© [Elastic Tile Service](https://www.elastic.co/elastic-tile-service)"地圖屬性字符串
tilemap.options.subdomains: tile服務使用的子域的數組。指定帶有令牌的URL的子域的位置{s}
elasticsearch.username:
和 elasticsearch.password:
若是您的Elasticsearch受基本認證保護,這些設置提供Kibana服務器用於在啓動時對Kibana索引執行維護的用戶名和密碼,
您的Kibana用戶仍須要使用經過Kibana服務器代理的Elasticsearch進行身份驗證
server.ssl.cert:
和 server.ssl.key:
分別指向PEM格式SSL證書和SSL密鑰文件的路徑。這些文件爲從Kibana服務器到瀏覽器的傳出請求啓用SSL
elasticsearch.ssl.cert:
和 elasticsearch.ssl.key:
提供PEM格式SSL證書和密鑰文件路徑的可選設置。這些文件驗證您的Elasticsearch後端使用相同的密鑰文件
elasticsearch.ssl.ca: 可選設置,使您可以爲Elasticsearch實例指定證書頒發機構的PEM文件的路徑
elasticsearch.pingTimeout: 默認值:值elasticsearch.requestTimeout設置以毫秒爲單位的時間等待Elasticsearch對PING做出響應
elasticsearch.requestTimeout: 默認值:30000等待來自後端或Elasticsearch的響應的時間(以毫秒爲單位)。此值必須爲正整數
elasticsearch.requestHeadersWhitelist: 默認值:[ 'authorization' ]要發送到Elasticsearch的Kibana客戶端頭標列表。要發送任何客戶端頭,請將此值設置爲[](一個空列表)
elasticsearch.customHeaders: 默認值:{}要發送到Elasticsearch的標題名稱和值。不管配置如何,
任何自定義標頭都不能被客戶端頭elasticsearch.requestHeadersWhitelist覆蓋
elasticsearch.shardTimeout: 默認值:0 Elasticsearch等待來自分片的響應的時間(毫秒)。設置爲0可禁用
elasticsearch.startupTimeout: 默認值:5000重試前等待Kibana啓動時Elasticsearch的時間(以毫秒爲單位
pid.file: 指定Kibana建立進程標識文件的路徑
logging.dest: 默認值:stdout容許您指定Kibana存儲日誌輸出的文件
logging.silent: 默認值:false將此設置的值設置true爲禁止全部日誌記錄輸出
logging.quiet: 默認值:false將此設置的值設置true爲禁止除錯誤消息以外的全部日誌記錄輸出
logging.verbose 默認值:false將此設置的值設置爲true記錄全部事件,包括系統使用信息和全部請求
ops.interval 默認值:5000設置示例系統和過程性能指標的間隔(以毫秒爲單位)。最小值爲100
status.allowAnonymous 默認值:false若是啓用了驗證,則將此設置爲true容許未經身份驗證的用戶訪問Kibana服務器狀態API和狀態頁
console.enabled 默認值:true設置爲false可禁用控制檯。切換這將致使服務器在下次啓動時從新生成資產,這可能會致使在開始投放網頁以前出現延遲
console.proxyFilter 默認值:.*用於驗證來自控制檯的任何傳出請求的正則表達式列表。若是沒有匹配,請求將被拒絕
console.proxyConfig 基於代理目標的配置選項列表。使用此選項能夠爲特定主機設置自定義超時或SSL設置。
這是經過match使用通配符/ globs 定義一組標準來完成的,這將根據每一個請求進行檢查。而後將全部匹配規則中的配置合併在一塊兒,以配置用於該請求的代理
有效匹配關鍵字match.protocol,
match.host,match.port,
和match.path
全部這些鍵默認爲*,這意味着它們將匹配任何值。有關示例,請參閱配置控制檯
elasticsearch.tribe.url: 用於全部查詢的Elasticsearch部落實例的可選URL
elasticsearch.tribe.username:
和 elasticsearch.tribe.password:
若是您的Elasticsearch受基本認證保護,這些設置提供Kibana服務器用於在啓動時對Kibana索引執行維護的用戶名和密碼。
您的Kibana用戶仍須要使用經過Kibana服務器代理的Elasticsearch進行身份驗證
elasticsearch.tribe.ssl.cert:
和 elasticsearch.tribe.ssl.key:
提供PEM格式SSL證書和密鑰文件路徑的可選設置。這些文件驗證您的Elasticsearch後端使用相同的密鑰文件
elasticsearch.tribe.ssl.ca: 可選設置,使您可以爲Elasticsearch實例指定證書頒發機構的PEM文件的路徑
elasticsearch.tribe.ssl.verify: 默認值:true要忽略SSL證書的有效性,請將此設置的值更改成false
elasticsearch.tribe.pingTimeout: 默認值:值elasticsearch.tribe.requestTimeout設置以毫秒爲單位的時間等待Elasticsearch對PING做出響應
elasticsearch.requestTimeout: 默認值:30000等待來自後端或Elasticsearch的響應的時間(以毫秒爲單位)。此值必須爲正整數

elasticsearch.tribe.requestHeadersWhitelist:
默認值:[ 'authorization' ]要發送到Elasticsearch的Kibana客戶端頭標列表。要發送任何客戶端頭,請將此值設置爲[](一個空列表)
elasticsearch.tribe.customHeaders: 默認值:{}要發送到Elasticsearch的標題名稱和值。不管配置如何,
任何自定義標頭都不能被客戶端頭elasticsearch.tribe.requestHeadersWhitelist覆蓋
三、運行Kibana
# su heboan
$ cd /opt/kibana/bin/
$ ./bin/kibana
默認狀況下,Kibana在前臺運行,將其日誌打印到標準輸出(stdout),並能夠經過按中止Ctrl-C
四、訪問Kibana
瀏覽器訪問192.168.88.1:5601,當咱們訪問Kibana時,默認狀況下將加載"發現"頁面,並選擇默認索引模式。時間過濾器爲最近15分分鐘,搜索查詢設置爲match-all(\*)
若是沒有看到任何文檔,請嘗試將時間過濾器設置爲更寬的時間範圍。若是尚未看到任何結果,這多是咱們不具有任何文件
咱們能夠經過導航到達Kibana服務器的狀態頁192.168.88.1:5601/status ,狀態頁面顯示有關服務器資源使用狀況的信息,並列出已安裝的插件
 
 
實踐--->Logstash收集Java日誌
 
日誌:
$ tree /home/heboan/logs
/home/heboan/logs
├── log-error.2017-02-10.log
├── log-error.2017-02-15.log
└── log-info.2017-02-10.log
error日誌格式:
2017-02-10 14:23:24.636 [http-nio-8082-exec-7] ERROR com.bagtree.api.app.AppDeviceController 145 - [userFollow:device = 1788223859148804 no bind to children]
2017-02-10 14:23:24.637 [http-nio-8082-exec-7] ERROR com.bagtree.common.extend.CommExceptionHandler 28 - 設備未關聯到寶貝
com.bagtree.common.extend.CommException: 設備未關聯到寶貝
	at com.bagtree.api.app.AppDeviceController.userFollow(AppDeviceController.java:146) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
2017-02-10 14:23:27.319 [http-nio-8082-exec-9] ERROR com.bagtree.api.app.AppDeviceController 145 - [userFollow:device = 1788223859148804 no bind to children]
2017-02-10 14:23:27.320 [http-nio-8082-exec-9] ERROR com.bagtree.common.extend.CommExceptionHandler 28 - 設備未關聯到寶貝
com.bagtree.common.extend.CommException: 設備未關聯到寶貝
	at com.bagtree.api.app.AppDeviceController.userFollow(AppDeviceController.java:146) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]

分析:
從上面的日誌咱們能夠看出,多行事件,就是一個日誌事件由多行組成,java的異常日誌基本上是這樣的
文檔說明
input  {
    stdin {
        codec => multiline {
            charset =>...   # 字符編碼  ,可選
            max_bytes =>    # bytes類型,設置最大的字節數,可選
            max_lines =>     #number類型,設置最大的行數,默認是500行,可選
            multiline_tag =>    #string類型,設置一個事件標籤,默認是"multiline" ,可選
            pattern =>...    # string 類型,設置匹配的正則表達式 ,必選                   patterns_dir =>...    #array類型,能夠設置多個正則表達式,可選
            negate =>...    # boolean類型,設置正向匹配仍是反向匹配,默認是false,可選
            what =>...   # 設置未匹配的內容是向前合併仍是向後合併,previous, next 兩個值選擇,必選
         }
    }
}
info日誌格式:
2017-02-10 23:59:41.156 [Thread-4] INFO  com.bagtree.push.OemPushClient 113 - package read length:23
2017-02-10 23:59:41.156 [Thread-4] INFO  com.bagtree.push.impl.response.LTHBCmdResponseHandlerImpl 33 - hb response:11722
2017-02-10 23:59:51.128 [Timer-0] INFO  com.bagtree.push.impl.response.LTLoginCmdResponseHandlerImpl 70 - hb send:117204298
2017-02-10 23:59:51.158 [Thread-4] INFO  com.bagtree.push.OemPushClient 113 - package read length:23
2017-02-10 23:59:51.158 [Thread-4] INFO  com.bagtree.push.impl.response.LTHBCmdResponseHandlerImpl 33 - hb response:11723

分析:這個info日誌是一行一個事件
根據上述分析,咱們編寫蒐集配置文件
$ vim /opt/logstash/conf/logstash.conf
input {
     file {
            path => "/home/heboan/logs/log-error.*.log"
            type => "log_error"
            start_position => "beginning"
            codec => multiline {
                         pattern => "^\d"
                         negate => true
                         what => "previous"
                     }
     }

     file {
            path => "/home/heboan/logs/log-info.*.log"
            type => "log_info"
            start_position => "beginning"
     }
}


output {
     if [type] == "log_error" {
            elasticsearch {
                    hosts => ["192.168.88.1:9200"]
                    index => "log_error_%{+YYYY-MM-dd}"
            }
     }  

     if [type] == "log_info" {
            elasticsearch {
                    hosts => ["192.168.88.1:9200]"
                    index => "log_info_%{+YYYY-MM-dd}"
            }
     }  
}
指定配置文件運行Logstash開始收集日誌傳送給Elasticsearch
$ /opt/logstash/bin/logstash -f /opt/logstash/conf/logstash.conf

運行成功以後,咱們能夠看下索引:
$ curl '192.168.88.1:9200/_cat/indices?v'
health status index                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   log_info_2017-02-16  iq0HUZKMQtqLgPCQpamXTw   5   1      11633            0      4.7mb          4.7mb
yellow open   .kibana              HesedL8WSiuprZzNObB-3w   1   1          1            0      3.1kb          3.1kb
yellow open   log_error_2017-02-16 lwG1iEsYSNmC5tgFIlUFMA   5   1          9            0     57.5kb         57.5kb
訪問Kibana:192.168.88.1:5601
剛剛咱們添加了info日誌,如今再添加error日誌
點擊右邊面板「Discover」,選擇時間篩選出日誌
相關文章
相關標籤/搜索