ELK 日誌管理系統,初次嘗試記錄


簡介:php

ELK 是一套開源的日誌管理平臺,主要包括三個組件,能夠用於日誌的收集、分析、存儲和展現工做。html

ELK 成員:Elasticsearch 、Logstash 、Kibana( K4 )前端

ELK 平臺特性:java

一、處理方式靈活,Elasticsearch 採用實時全文索引,不須要像 storm 同樣預先編程才能使用
二、配置簡單、易上手,Elasticsearch 所有采用 Json 接口;Logstash 是 Ruby DSL 設計,都是業界最通用的配置語法設計
三、檢索性能高效,雖然每次查詢都是實時計算,可是優秀的設計和實現基本能夠達到全天數據查詢的秒級響應
四、集羣線性擴展,Elasticsearch 、Logstash 集羣均可以線性擴展
五、前端操做簡單、界面漂亮,只需點擊鼠標就能夠完成搜索、聚合功能,生成炫酷的儀表盤node

ELK 各成員工做職責:linux

一、Logstash 是一個開源的日誌收集管理工具,支持各類日誌類型的接收、處理、轉發
二、Elasticsearch 是一個分佈式、接近實時的搜索引擎,支持時間索引、全文索引,能夠看做是一個文本數據庫
三、Kibana 負責將 Elasticsearch 中的數據,按需求展現信息git

ELK 擴展成員:github

Redis : 通常狀況下被用做 NoSQL 數據庫,而這裏是做爲消息隊列存在的,意思是:當客戶端將消息寫入隊列後,服務端會把消息取走,因此沒必要擔憂會把機器內存佔滿
Nginx : 通常狀況下被用做 Web 服務器或 Web 緩存、反向代理、負載均衡器,呃,這裏也是用做將請求反向代理到 Kibana 的監聽端口( 雖然 Kibana 也能夠直接對外提供服務,可是考慮到性能、安全跟別的問題仍是這樣比較好 )web

軟件下載地址:https://www.elastic.co/downloadsredis

Elasticsearch : https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.tar.gz
Logstash : https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz
Kibana : https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz

## 這裏使用的源碼包,你也能夠在這裏下載對應的 RPM 包

環境描述:

192.168.214.20 服務端
192.168.214.30 客戶端

## 操做系統:CentOS 6.6 x86_64 安裝方式:minimal

1、客戶端操做( 安裝、配置 Logstash )

一、安裝 Logstash

shell > yum -y install java  ## 也能夠下載源碼的 jdk 包來安裝,推薦這種簡單暴力的方式

shell > cd /usr/local/src

shell > wget https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz

shell > tar zxf logstash-1.5.2.tar.gz

shell > mv logstash-1.5.2 ../logstash

shell > /usr/local/logstash/bin/logstash -e 'input{stdin{}} output{stdout{}}'
Hello World
2015-07-14T11:36:28.287Z localhost.localdomain Hello World

## -e 參數能夠直接從命令行獲取信息,後面花括號中的意思爲:從標準輸入接收數據,輸出到標準輸出
## 當輸入 Hello World 時,輸出下面的信息:時間、主機名、內容
## 按 Ctrl+c 中止

shell > /usr/local/logstash/bin/logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'
Hello World

## 與上次不一樣的是,添加了 codec 參數,改變了輸出格式,能夠在配置文件中定義 input 、codec 、filter 、output

{
       "message" => "Hello World",
      "@version" => "1",
    "@timestamp" => "2015-07-14T11:55:55.235Z",
          "host" => "localhost.localdomain"
}

## 這是輸出信息

二、配置 Logstash

shell > vim /usr/local/logstash/logstash.conf

# Logstash.conf

input {
    file {
        path => '/tmp/access.log'
        start_position => 'beginning'
    }
}

output {
    redis {
        host => '192.168.214.20'
        port => '6379'
        data_type => "list"
        key => "logstash-list"
    }
}

## logstash.conf 中至少要有一個 input 跟 output ,不然默認使用 stdin 跟 stdout

2、服務端操做( Redis 、Elasticsearch 、Logstash 、Kibana )

一、安裝、配置、啓動 Redis

shell > cd /usr/local/src

shell > wget http://download.redis.io/releases/redis-3.0.2.tar.gz

shell > tar zxf redis-3.0.2.tar.gz

shell > cd redis-3.0.2 ; make ; make install

shell > mkdir /usr/local/redis

shell > cp /usr/local/src/redis-3.0.2/redis.conf /usr/local/redis/

shell > sed -i '/daemonize/s/no/yes/' /usr/local/redis/redis.conf

shell > sed -i 's#dir ./#dir /usr/local/redis#' /usr/local/redis/redis.conf

shell > redis-server /usr/local/redis/redis.conf

shell > redis-cli ping
PONG

## 至此,證實 Redis 啓動正常( 想進一步瞭解 Redis 的小夥伴能夠參考官方文檔,http://blog.chinaunix.net/uid/30272825/cid-211045-list-1.html 這裏也有!)

shell > iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

shell > service iptables save

## 要開放 TCP 6379 端口,否則客戶端數據寫不進來

二、測試一

## 客戶端啓動 Logstash ,而後服務端查看 Redis 中有沒有數據

shell > /usr/local/logstash/bin/logstash -f /usr/local/logstash/logstash.conf & ( 客戶端 )

shell > redis-cli
127.0.0.1:6379> keys *
1) "logstash-list"
127.0.0.1:6379> LRANGE logstash-list 0 -1
 1) "{\"message\":\"12.12.12.12 error\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:34:02.779Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 2) "{\"message\":\" [02/Mar/2015:00:42:20 +0800] \\\"POST /include/dialog/select_soft_post.php HTTP/1.1\\\" 404 233\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.366Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 3) "{\"message\":\"149.129.145.215 - - [02/Mar/2015:01:16:56 +0800] \\\"GET /tmUnblock.cgi HTTP/1.1\\\" 400 226\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.375Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 4) "{\"message\":\"210.63.99.212 - - [02/Mar/2015:02:49:24 +0800] \\\"HEAD / HTTP/1.0\\\" 403 -\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.380Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 5) "{\"message\":\"222.186.128.50 - - [02/Mar/2015:03:07:36 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.381Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 6) "{\"message\":\"222.186.128.55 - - [02/Mar/2015:06:53:21 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.381Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 7) "{\"message\":\"222.186.128.53 - - [02/Mar/2015:07:10:43 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.382Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 8) "{\"message\":\"120.132.77.252 - - [02/Mar/2015:10:54:32 +0800] \\\"GET http://www.ly.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.383Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
 9) "{\"message\":\"123.59.33.27 - - [02/Mar/2015:11:15:36 +0800] \\\"GET http://www.ly.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.386Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
10) "{\"message\":\"1.161.59.46 - - [02/Mar/2015:14:19:19 +0800] \\\"CONNECT mx2.mail2000.com.tw:25 HTTP/1.0\\\" 405 225\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.387Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
11) "{\"message\":\"59.108.122.184 - - [29/Apr/2015:14:33:19 +0800] \\\"GET http://www.example.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.387Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
12) "{\"message\":\"\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.388Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"

## 很明顯獲取到了數據,這說明:客戶端保存數據到服務端的 Redis 環節沒有問題

三、安裝、配置、啓動 Elasticsearch

shell > cd /usr/local/src

shell > wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.tar.gz

shell > mv elasticsearch-1.6.0 /usr/local/elasticsearch

shell > vim /usr/local/elasticsearch/config/elasticsearch.yml

cluster.name: my_es
node.name: "Master"

## cluster.name 集羣名稱,局域網內只要這個名稱相同,那麼就能夠自動組成一個集羣
## nod.name 節點名稱
## 這些都是能夠不用修改的,採用默認參數便可

shell > vim /usr/local/elasticsearch/bin/elasticsearch.in.sh

if [ "x$ES_MIN_MEM" = "x" ]; then
    ES_MIN_MEM=64m
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
    ES_MAX_MEM=128m
fi

## 這裏面須要注意一下,根據實際狀況修改 Elasticsearch 可使用的最大、小內存

shell > /usr/local/elasticsearch/bin/elasticsearch -d

## -d 後臺啓動,關閉命令:curl -X POST 127.0.0.1:9200/_shutdown
## 默認 HTTP 監聽端口是 9200 ,能夠經過 web 訪問、也可使用 curl 工具等

shell > curl -X GET 127.0.0.1:9200
{
  "status" : 200,
  "name" : "master",
  "cluster_name" : "my_es",
  "version" : {
    "number" : "1.6.0",
    "build_hash" : "cdd3ac4dde4f69524ec0a14de3828cb95bbb86d0",
    "build_timestamp" : "2015-06-09T13:36:34Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

## 一些輸出的狀態信息,狀態碼、節點名、集羣名、版本信息等等

shell > curl -X GET 127.0.0.1:9200/_cat/nodes?v
host                  ip        heap.percent ram.percent load node.role master name
localhost.localdomain 127.0.0.1           25          92 2.07 d         *      master

## 搜索節點信息

四、安裝、配置、啓動 Logstash

## 安裝跟客戶端同樣便可( 參考上面部分 )

shell > vim /usr/local/logstash/logstash.conf

# Logstash.conf

input {
    redis {
        host => '127.0.0.1'
        port => '6379'
        data_type => 'list'
        key => 'logstash-list'
    }
}

output {
    elasticsearch {
        host => '127.0.0.1'
        port => '9200'
        protocol => 'http'
    }
}

## 服務端配置 Logstash 從本機的 Redis 取數據,存放到本機的 Elasticsearch

shell > /usr/local/logstash/bin/logstash -f /usr/local/logstash/logstash.conf &

五、測試二

shell > curl -X GET 127.0.0.1:9200/_cat/indices?v
health status index               pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash-2015.07.14   5   1          1            0      4.1kb          4.1kb

## 能夠看到已經有索引,名爲 logstash-2015.07.14

shell > curl -X GET 127.0.0.1:9200/logstash-2015.07.14

## 能夠這樣簡單查詢一下具體數據

六、Kibana 展現階段( K4 )

shell > cd /usr/local/src

shell > wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz

shell > tar zxf kibana-4.1.1-linux-x64.tar.gz

shell > mv kibana-4.1.1-linux-x64 /usr/local/kibana

shell > /usr/local/kibana > /usr/local/kibana/kibana.log &

## 好了,這樣就算是啓動成功了
## 默認監聽 5601 端口,能夠直接訪問 http://192.168.214.20:5601

## 這部份內容其實挺多的,要想玩好這個,得單獨去研究 Logstash 、Elasticsearch 、Kibana 這三樣東西,先這樣吧!( 感受好難哦,到如今連個皮毛都沒學會,丟人 )

## 參考文檔:http://kibana.logstash.es/content/index.html
## https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

相關文章
相關標籤/搜索