Elasticsearch + Logstash + Kibana

ELK簡介ELKStack即Elasticsearch + Logstash + Kibana。日誌監控和分析在保障業務穩定運行時,起到了很重要的作用。比如對nginx日誌的監控分析,nginx是有日誌文件的,它的每個請求的狀態等都有日誌文件進行記錄,所以可以通過讀取日誌文件來分析;redis的list結構正好可以作爲隊列使用,用來存儲logstash傳輸的日誌數據。然後elasticsearch就可以進行分析和查詢了。
本文搭建的的是一個分佈式的日誌收集和分析系統。logstash有agent和indexer兩個角色。對於agent角色,放在單獨的web機器上面,然後這個agent不斷地讀取nginx的日誌文件,每當它讀到新的日誌信息以後,就將日誌傳送到網絡上的一臺redis隊列上。對於隊列上的這些未處理的日誌,有不同的幾臺logstash indexer進行接收和分析。分析之後存儲到elasticsearch進行搜索分析。再由統一的kibana進行日誌web界面的展示。

Java環境安裝

首先我們需要一臺linux機器,緊哥其實非常不喜歡在window下安裝軟件,hoho~
當然我們也默認你已經安裝了java,建議版本是使用1.8,但是我使用的是1.7,就是這麼任性~

colin@colindev:~$ java -version 
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Logstash安裝

  1. 下載logstash並解壓,推薦使用最新版本
  2. 創建simple.conf文件,並編寫測試conf
input { stdin { } }
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}
colin@colindev:~$ wget https://download.elastic.co/logstash/logstash/logstash-2.3.1.tar.gz
colin@colindev:~$ tar -zvxf logstash-2.3.1.tar.gz
colin@colindev:~$ vim simple.conf 
colin@colindev:~$ /home/colin/logstash-2.3.1/bin/logstash -f simple.conf --debug

3.可以看到logstash已經運行,輸入hello world會有log打印出來則安裝成功

Elasticsearch安裝

ElasticSearch默認的對外服務的HTTP端口是9200,節點間交互的TCP端口是9300(這個可以自配置),注意打開tcp端口

  1. 先下載並解壓
  2. 安裝mobz/elasticsearch-head插件
  3. 啓動logstash並測試 elasticsearch 注意:啓動elasticsearch的話不能用root賬號哈~
colin@colindev:~$  wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz
colin@colindev:~$  tar -zxvf elasticsearch-1.7.1.tar.gz 
[colin@colindev:bin ]$ ./plugin install mobz/elasticsearch-head
[colin@colindev bin]$ elasticsearch start

啓動起來的界面是:

clipboard.png

clipboard.png

接下來就要安裝kibana了

Kibana安裝

[root@hadoop-slave ~]# wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz
[root@hadoop-slave elk]# tar -zxf kibana-4.1.1-linux-x64.tar.gz 
[root@hadoop-slave elk]# mv kibana-4.1.1-linux-x64 /usr/local/elk
[root@hadoop-slave bin]# pwd
/usr/local/elk/kibana/bin
[root@hadoop-slave bin]# ./kibana  &

打開http://localhost:5601/
如果需要遠程訪問,需要打開iptables的tcp的5601端口。

ELK+logback結合

  1. 需要修改logstash的配置文件
  2. 修改logback配置文件github-> 使用ogstash-logback-encode
input {
  tcp {
    host => "192.168.1.167" 
    port => 9250
    mode => "server"
    tags => ["tags"]
    codec => json_lines  //可能需要更新logstash插件
  }

}


output {
 stdout{codec =>rubydebug}
  elasticsearch {
   hosts => ["localhost:9200"]  //這塊配置需要帶端口號
    flush_size => 1000

  }
}
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property resource="properties/logback-variables.properties" />     <!-- 得到APP_NAME log_path的值 -->

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8"> <!-- encoder 可以指定字符集,對於中文輸出有意義 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
            </pattern>
        </encoder>
    </appender>
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.1.167:9250</destination>

        <!-- encoder is required -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!--<appender name="async" class="ch.qos.logback.classic.AsyncAppender">-->
        <!--<appender-ref ref="stash" />-->
    <!--</appender>-->


    <root level="info">                    <!-- 設置日誌級別 -->
        <appender-ref ref="STDOUT" />
        <appender-ref ref="stash" />
    </root>
</configuration>

寫一個測試程序:

import org.junit.Test;
import org.slf4j.LoggerFactory;


/**
 * Created by colinsu on 2016/4/14.
 */
public class LogstashTest {
    private static final org.slf4j.Logger LGR = LoggerFactory.getLogger(LogstashTest.class);

    @Test
    public void test() {
        LogstashTest obj = new LogstashTest();
        try{
            obj.divide();
        }catch(ArithmeticException ex){
            LGR.error("大家好111!", ex);
        }
    }
    private void divide(){
        int i = 10 /0;
    }
}

clipboard.png

使用logstash debug模式

/home/colin/logstash-2.3.1/bin/logstash -f simple.conf --debug

這裏可能因爲buffer大小的原因不能flush,多執行幾次就好了,timestamp會相差8小時,沒有什麼影響,在kibana會顯示正常
clipboard.png

使用kibana來查看相應的結果

clipboard.png

待改進和學習的地方

  1. 需要加上收集的緩衝組件。如 redis,kafka等
  2. 配置文件可以配置niginx,linux,jvm等日誌
  3. 報表可視化熟練
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章