centos7搭建ELK開源實時日誌分析系統

Elasticsearch 是個開源分佈式搜索引擎它的特點有分佈式零配置自動發現索引自動分片索引副本機制 restful 風格接口多數據源自動搜索負載等。

Logstash 是一個完全開源的工具他可以對你的日誌進行收集、分析並將其存儲供以後使用如搜索。

kibana 也是一個開源和免費的工具他 Kibana 可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面可以幫助您彙總、分析和搜索重要數據日誌。

日誌從客戶端到服務端處理後在傳遞給客戶的數據流流向如下

Logstash-forwarder--->Logstash--->Elasticsearch--->kibana--->nginx--->客戶瀏覽器

其中Logstash-forwarder是客戶端的日誌收集工具將日誌發送給服務端Logstash後Logstash通過使用grok匹配規則對日誌進行匹配切割然後保存在Elasticsearch中通過kibana從Elasticsearch中讀取數據並轉交給nginx來處理後返回給客戶。

好了下面就是ELK系統的安裝過程了。

下面是elasticsearch/logstash 所需JVM版本

wKiom1ZTt0WB8A6uAACI9Nv_8F4171.png

首先安裝JAVA環境

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm"
rpm -Uvh jdk-8u65-linux-x64.rpm

或者直接yum安裝jdk也行不過要保證安裝好對應的版本。

當然也可以源碼安裝不過源碼安裝需要注意設置好環境變量

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.tar.gz"
tar zxvf jdk-8u65-linux-x64.tar.gz
mv jdk1.8.0_65 java
vi /etc/profile
JAVA_HOME="/usr/local/java" 
PATH=$JAVA_HOME/bin:$PATH 
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export JAVA_HOME 
export PATH 
export CLASSPATH
source /etc/profile

安裝好jdk環境之後需要安裝Elasticsearch

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
wget -c https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.noarch.rpm
rpm -ivh elasticsearch-1.7.2.noarch.rpm

修改配置文件如下

cd /usr/local/elasticsearch/
vim config/elasticsearch.yml
path.data: /data/db
network.host: 192.168.100.233

安裝Elasticsearch插件如下

cd /usr/share/elasticsearch/ &&  ./bin/plugin -install mobz/elasticsearch-head && ./bin/plugin -install lukas-vlcek/bigdesk/2.5.0

之後啓動Elasticsearch

systemctl start elasticsearch


然後開始安裝kibana

去https://www.elastic.co/downloads/kibana 找合適的版本每個版本下面有這麼一行內容一定要注意這些內容Compatible with Elasticsearch 1.4.4 - 1.7

我這裏選擇的是kibana-4.1.3-linux-x64.tar.gz

wget https://download.elastic.co/kibana/kibana/kibana-4.1.3-linux-x64.tar.gz 
tar xf kibana-4.1.3-linux-x64.tar.gz
mv kibana-4.1.3-linux-x64 /usr/local/kibana
cd !$
vim config/kibana.yml 
port: 5601
host: "192.168.100.233"
elasticsearch_url: "http://192.168.100.233:9200"


配置文件中指明kibana偵聽5601端口並且通過9200端口從elasticsearch裏面獲取數據。

再安裝nginx可以選擇源碼安裝這裏爲了圖方便就使用yum安裝了。

yum -y install nginx

vim /etc/nginx/nginx.conf

將server改成如下

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name _;
         location / {
         proxy_pass http://192.168.100.233:5601;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection 'upgrade';
         proxy_set_header Host $host;
         proxy_cache_bypass $http_upgrade;
            }
}

將日誌保存格式修改爲如下

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $upstream_response_time $request_time $body_bytes_sent '
             '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$request_body" '
             '$scheme $upstream_addr';

修改日誌格式是爲了匹配後面的Logstash的grok匹配規則

啓動nginx和kibana

systemctl start nginx
nohup /usr/local/kibana/bin/kibana -l /var/log/kibana.log &

或者也可以看看下面兩個腳本

cd /etc/init.d &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-init
cd /etc/default &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-default

關於開機啓動Kibana的。

之後就需要安裝Logstash了

rpm --import https://packages.elasticsearch.org/GPG-KEY-elasticsearch
vi /etc/yum.repos.d/logstash.repo
[logstash-1.5]
name=Logstash repository for 1.5.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.5/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
yum -y install logstash

這個包比較大可能國內下載起來比較慢可以去官網使用迅雷下載比較快一點。

創建TLS證書

logstash和logstash-forwarder通信需要使用tls證書認證。Logstash Forwarder上面只需公鑰logstash需要配置公鑰、私鑰。在logstash服務器上生成ssl證書。

創建ssl證書有兩種方式一種指定IP地址一種指定fqdn(dns)。

1、指定IP地址方式

vi /etc/pki/tls/openssl.cnf

在[ v3_ca ]下面配置subjectAltName = IP:192.168.100.233切記這條很重要因爲還有一個地方也有subjectAltName配置錯了的話就會一直無法實現認證

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

注意將-days設置大點以免證書過期。

2、使用fqdn方式

不需要修改openssl.cnf文件。

cd /etc/pki/tls
openssl req -subj '/CN=logstash.abcde.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

將logstash.abcde.com換成你自己的域名。同時到域名解析那添加logstash.abcde.com的A記錄。

使用那種方式都行不過如果logstash服務端的IP地址變換了證書不可用了。


配置logstash

logstash配置文件是以json格式設置參數的配置文件位於/etc/logstash/conf.d目錄下配置包括三個部分輸入端過濾器和輸出。

首先創建一個01-lumberjack-input.conf文件設置lumberjack輸入Logstash-Forwarder使用的協議。

vi /etc/logstash/conf.d/01-lumberjack-input.conf
input {
  lumberjack {
    port => 5043
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

再來創建一個02-nginx.conf用於過濾nginx日誌

vi /etc/logstash/conf.d/02-nginx.conf 
filter {
  if [type] == "nginx" {
    grok {
      match => { "message" => "%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?: %{URIPROTO:proto}/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:status} (?:%{NUMBER:upstime}|-) %{NUMBER:reqtime} (?:%{NUMBER:size}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{QS:reqbody} %{WORD:scheme} (?:%{IPV4:upstream}(:%{POSINT:port})?|-)" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
   geoip {
        source => "clientip"
        add_tag => [ "geoip" ]
        fields => ["country_name", "country_code2","region_name", "city_name", "real_region_name", "latitude", "longitude"]
        remove_field => [ "[geoip][longitude]", "[geoip][latitude]" ]
    }
  }
}

這個過濾器會尋找被標記爲“nginx”類型Logstash-forwarder定義的的日誌嘗試使用“grok”來分析傳入的nginx日誌使之結構化和可查詢。

type要與logstash-forwarder相匹配。

同時注意將nginx日誌格式設置成上面的。

日誌格式不對grok匹配規則要重寫。

可以通過http://grokdebug.herokuapp.com/ 在線工具進行調試。多半ELK沒數據錯誤在此處。

grok 匹配日誌不成功不要往下看了。搞對爲止先。

同時多看看http://grokdebug.herokuapp.com/patterns#   grok匹配模式對後面寫規則匹配很受益的。

最後創建一文件來定義輸出。

vi /etc/logstash/conf.d/03-lumberjack-output.conf 
output {
    if "_grokparsefailure" in [tags] {
      file { path => "/var/log/logstash/grokparsefailure-%{type}-%{+YYYY.MM.dd}.log" }
    }
    elasticsearch {
        host => "10.1.19.18"
        protocol => "http"
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        workers => 5
        template_overwrite => true
    }
    #stdout { codec =>rubydebug }
}

定義結構化的日誌存儲到elasticsearch對於不匹配grok的日誌寫入到文件。

注意後面添加的過濾器文件名要位於01-99之間。因爲logstash配置文件有順序的。

在調試時候先不將日誌存入到elasticsearch而是標準輸出以便排錯。

同時多看看日誌很多錯誤在日誌裏有體現也容易定位錯誤在哪。

在啓動logstash服務之前最好先進行配置文件檢測如下

/opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/*
Configuration OK

也可指定文件名檢測直到OK才行。不然logstash服務器起不起來。

最後就是啓動logstash服務了。

systemctl start logstash

然後就是配置Logstash-forwarder客戶端了。

安裝logstash-forwarder

wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm
rpm -ivh logstash-forwarder-0.4.0-1.x86_64.rpm

需要將在安裝logstash時候創建的ssl證書的公鑰拷貝到每臺logstash-forwarder服務器上。

scp 192.168.100.233:/etc/pki/tls/certs/logstash-forwarder.crt /etc/pki/tls/certs/

配置logstash-forwarder

vi /etc/logstash-forwarder.conf
{
  "network": {
    "servers": [ "10.1.19.18:5043" ],
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
    "timeout": 30
  },
  "files": [
    {
        "paths": [ "/alidata/logs/nginx/*-access.log" ],
        "fields": { "type": "nginx" }
    } 
  ]
}

這也是個json個是的配置文件。json格式不對logstash-forwarder服務是啓動不起來的。

後面就是啓動logstash-forwarder服務了。

當上面的所有都配置正確的話就可以訪問kibana來查看數據了。

訪問效果如下所示

wKiom1ZT1XTSzt05AAJNjn4xvHY184.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章