1. 程式人生 > >10.企業級ELK日誌平臺實戰+http訪問安全認證

10.企業級ELK日誌平臺實戰+http訪問安全認證

發生 正常 tor 接下來 count cell 1.5 文件夾 知識庫

第1章 ELK日誌平臺入門簡介

作為運維工程師,我們每天需要對服務器進行故障排除,那麽最先能幫助我們定位問題的就是查看服務器日誌,通過日誌可以快速的定位問題。

目前我們說的日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常需要分析日誌可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。而且日誌被分散的儲存不同的設備上。

如果你管理數上百臺服務器,我們登錄到每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集匯總。

集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用find、grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。

今天給大家分享的開源實時日誌分析ELK平臺能夠完美的解決我們上述的問題,ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。

1) Elasticsearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等ELK官網:https://www.elastic.co/

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

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

4) Logstash和Elasticsearch是用Java語言編寫,Kibana使用node.js框架,在配置ELK環境要保證系統有JAVA JDK開發庫哦。

1.1 ELK原理拓撲圖

今天帶大家一起來學習EKL企業分布式實時日誌平臺的構建.

技術分享圖片

1) ELK工作流程

通過logstash收集客戶端APP的日誌數據,將所有的日誌過濾出來,存入Elasticsearch 搜索引擎裏,然後通過Kibana GUI在WEB前端展示給用戶,用戶需要可以進行查看指定的日誌內容。

同時也可以加入redis通信隊列:

圖一:

技術分享圖片

2) 加入Redis隊列後工作流程

Logstash包含Index和Agent(shipper) ,Agent負責客戶端監控和過濾日誌,而Index負責收集日誌並將日誌交給ElasticSearch,ElasticSearch將日誌存儲本地,建立索引、提供搜索,kibana可以從ES集群中獲取想要的日誌信息。

1.2 Elasticsearch安裝配置

安裝ELK之前,需要先安裝JDK (Java Development Kit) 是 Java 語言的軟件開發工具包(SDK)),這裏選擇jdk-6u18-linux-x64-rpm.bin,bin文件安裝跟sh文件方法一樣,sh ./ jdk-6u18-linux-x64-rpm.bin,回車即可,默認安裝到/usr/java/jdk1.6.0_18目錄下。

配置java環境變量,vi /etc/profile 添加如下語句:

export JAVA_HOME=/usr/java/jdk1.6.0_18

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

source /etc/profile //使環境變量立刻生效。

java -version //查看java版本,顯示版本為1.6.0_18,證明安裝成功。

分別下載ELK軟件包:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz

1) ELK安裝信息

192.168.111.128 Elasticsearch

192.168.111.129 Kibana

192.168.111.130 Logstash

2) 192.168.111.128上安裝ES

安裝JDK版本信息,

tar xzf jdk-8u121-linux-x64.tar.gz

mkdir -p /usr/java/ ;mv jdk1.8.0_121/ /usr/java/

同時在/etc/profile末尾加入如下三行:

export JAVA_HOME=/usr/java/jdk1.8.0_121

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

3) 下載ES並配置

tar xzf elasticsearch-2.4.0.tar.gz

mv elasticsearch-2.4.0 /usr/local/elasticsearch/

技術分享圖片

修改vim /usr/local/elasticsearch/config/elasticsearch.yml文件

設置監聽地址為network.hosts:0.0.0.0

技術分享圖片

useradd elk

chown -R elk:elk /usr/local/elasticsearch/logs/

su - elk

/usr/local/elasticsearch/bin/elasticsearch -d

啟動後如下圖:

技術分享圖片

至此ES配置完畢,如果想配置ES集群模式,同樣也非常簡單,只需要拷貝 ES副本集即可,然後修改相應的參數。

1.3 Elasticsearch插件安裝

安裝ES HEAD插件。

cd /usr/local/elasticsearch;./bin/plugin install mobz/elasticsearch-head

技術分享圖片

技術分享圖片

http://192.168.111.128:9200/_plugin/head/

技術分享圖片

Elasticsearch-head是elasticsearch的集群管理工具,它是完全由HTML5編寫的獨立網頁程序,你可以通過插件把它安裝到ES,然後重啟ES,通過界面訪問和管理即可。

1.4 Kibana安裝配置

安裝kibana不需要安裝JAVA JDK環境,直接下載源碼,解壓即可。

tar -xzf kibana-4.5.4-linux-x64.tar.gz

mv kibana-4.5.4-linux-x64 /usr/local/kibana/

修改kibana配置文件信息,設置ES地址:

vim /usr/local/kibana/config/kibana.yml

技術分享圖片

1.5 Logstash安裝配置

安裝JDK版本信息,

tar xzf jdk-8u121-linux-x64.tar.gz

mkdir -p /usr/java/ ;mv jdk1.8.0_121/ /usr/java/

同時在/etc/profile末尾加入如下三行:

export JAVA_HOME=/usr/java/jdk1.8.0_121

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

然後解壓logstash:

tar xzf logstash-5.3.0.tar.gz

mv logstash-5.3.0 /usr/local/logstash/

1.6 ELK收集簡單日誌

進入目錄cd /usr/local/logstash/config/etc/ (如果沒有etc請創建)

創建ELK整合配置文件:vim logstash.conf,內容如下:

input {

stdin { }

}

output {

stdout {

codec => rubydebug {}

}

elasticsearch {

hosts => "192.168.111.128" }

}

4) 啟動logstash服務

/usr/local/logstash/bin/logstash -f logstash.conf

技術分享圖片

1.7 ELK-WEB數據展示

logstash啟動窗口中輸入任意信息,會自動輸出相應格式日誌信息:

技術分享圖片

瀏覽器輸入:http://192.168.111.129:5601/

技術分享圖片

為了使用kibana 你必須配置至少一個索引模式,索引模式是用於確認Elasticsearch index,用來運行搜索和分析,也可以用於配置字段。

Index contains time-based events 索引基於時間的事件

Use event times to create index names [DEPRECATED] 使用事件時間來創建索引名字【過時

Index name or pattern 索引名字或者模式

模式允許你定義動態的索引名字 使用*作為通配符,例如默認:

logstash-*

選擇:

Time field name

然後點擊Discover,可以搜索和瀏覽 Elasticsearch 中的數據,默認搜索的是最近 15分鐘的數據。可以自定義選擇時間。

技術分享圖片

1.8 Redis服務數據存儲

wget http://download.redis.io/releases/redis-2.8.13.tar.gz

tar zxf redis-2.8.13.tar.gz

cd redis-2.8.13

make PREFIX=/usr/local/redis install

cp redis.conf /usr/local/redis/

/usr/local/redis/bin/目錄加入至環境變量配置文件/etc/profile末尾,然後Shell終端執行source /etc/profile讓環境變量生效。

export PATH=/usr/local/redis/bin:$PATH

Nohup後臺啟動及停止Redis服務命令:

nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &

/usr/local/redis/bin/redis-cli -p 6379 shutdown

1.9 ELK收集MYSQL日誌

目錄/usr/local/logstash/config/etc/:

1) 日誌采集-存入Redis緩存數據庫;

agent.conf文件內容:

input {

file {

type => "mysql-access"

path => "/var/log/mysqld.log"

}

}

output {

redis {

host => "localhost"

port => 6379

data_type => "list"

key => "logstash"

}

}

然後啟動Agent:

../bin/logstash -f agent.conf

技術分享圖片

2) Redis數據-存入ES;

index.conf文件內容:

input {

redis {

host => "localhost"

port => "6379"

data_type => "list"

key => "logstash"

type => "redis-input"

batch_count => 1

}

}

output {

elasticsearch {

hosts => "192.168.111.128"

}

}

然後啟動index:

../bin/logstash -f index.conf

技術分享圖片

查看啟動進程:

技術分享圖片

1.10 ELK收集內核日誌

目錄/usr/local/logstash/config/etc/:

1) 日誌采集-存入Redis緩存數據庫;

agent.conf文件內容:

input {

file {

type => "kernel-message"

path => "/var/log/messages"

}

}

output {

redis {

host => "localhost"

port => 6379

data_type => "list"

key => "logstash"

}

}

然後啟動Agent:

../bin/logstash -f agent.conf

技術分享圖片

2) Redis數據-存入ES;

index.conf文件內容:

input {

redis {

host => "localhost"

port => "6379"

data_type => "list"

key => "logstash"

type => "redis-input"

batch_count => 1

}

}

output {

elasticsearch {

hosts => "192.168.111.128"

}

}

然後啟動index:

../bin/logstash -f index.conf

技術分享圖片

查看啟動進程:

技術分享圖片

1.11 ELK收集Nginx日誌

目錄/usr/local/logstash/config/etc/:

3) 日誌采集-存入Redis緩存數據庫;

agent.conf文件內容:

input {

file {

type => "nginx-access"

path => "/usr/local/nginx/logs/access.log"

}

}

output {

redis {

host => "localhost"

port => 6379

data_type => "list"

key => "logstash"

}

}

然後啟動Agent:

../bin/logstash -f agent.conf

技術分享圖片

4) Redis數據-存入ES;

index.conf文件內容:

input {

redis {

host => "localhost"

port => "6379"

data_type => "list"

key => "logstash"

type => "redis-input"

batch_count => 1

}

}

output {

elasticsearch {

hosts => "192.168.111.128"

}

}

然後啟動index:

../bin/logstash -f index.conf

技術分享圖片

查看啟動進程:

技術分享圖片

瀏覽器訪問kibana-WEB:

http://192.168.149.129:5601

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

1.12 ELK收集Tomcat日誌

目錄/usr/local/logstash/config/etc/:

5) 日誌采集-存入Redis緩存數據庫;

agent.conf文件內容:

input {

file {

type => "nginx-access"

path => "/usr/local/tomcat/logs/catalina.out"

}

}

output {

redis {

host => "localhost"

port => 6379

data_type => "list"

key => "logstash"

}

}

然後啟動Agent:

../bin/logstash -f agent.conf

技術分享圖片

6) Redis數據-存入ES;

index.conf文件內容:

input {

redis {

host => "localhost"

port => "6379"

data_type => "list"

key => "logstash"

type => "redis-input"

batch_count => 1

}

}

output {

elasticsearch {

hosts => "192.168.111.128"

}

}

然後啟動index:

../bin/logstash -f index.conf

技術分享圖片

查看啟動進程:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

1.13 Kibana批量日誌收集

如上配置可以正常收集單臺服務器的日誌,如何批量收集其他服務器的日誌信息呢,方法步驟是什麽呢?

可以基於SHELL腳本將配置完畢的logstash文件夾同步至其他服務器,或者通過ansible、saltstack服務器均可。

例如收集Nginx日誌,index.conf和agent.conf內容保持不變即可:

配置文件目錄:/usr/local/logstash/config/etc/,需修改配置文件原Redis服務器localhost為Redis服務器的IP即可;

1) 日誌采集-存入Redis緩存數據庫;

agent.conf文件內容:

input {

file {

type => "nginx-access"

path => "/usr/local/nginx/logs/access.log"

}

}

output {

redis {

host => "localhost"

port => 6379

data_type => "list"

key => "logstash"

}

}

然後啟動Agent:

../bin/logstash -f agent.conf

技術分享圖片

2) Redis數據-存入ES;

index.conf文件內容:

input {

redis {

host => "localhost"

port => "6379"

data_type => "list"

key => "logstash"

type => "redis-input"

batch_count => 1

}

}

output {

elasticsearch {

hosts => "192.168.111.128"

}

}

然後啟動index:

../bin/logstash -f index.conf

技術分享圖片

查看啟動進程:

技術分享圖片

1.14 Kibana安全認證

當我們安裝完ES、Kibana啟動進程,可以直接在瀏覽器訪問,這樣不利於數據安全,接下來我們利用Apache的密碼認證進行安全配置。通過訪問Nginx轉發只ES和kibana服務器。

Kibana服務器安裝Nginx:

yum install pcre-devel pcre -y

wget -c http://nginx.org/download/nginx-1.12.0.tar.gz

tar -xzf nginx-1.12.0.tar.gz

useradd www ;./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make

make install

修改Nginx.conf配置文件代碼如下:

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

upstream jvm_web1 {

server 127.0.0.1:5601 weight=1 max_fails=2 fail_timeout=30s;

}

server {

listen 80;

server_name localhost;

location / {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://jvm_web1;

}

}

}

修改kibana配置文件監聽IP為127.0.0.1:

技術分享圖片

重啟kibana和Nginx服務,通過Nginx 80端口訪問如下:

技術分享圖片

添加Nginx權限認證:

Nginx.conf配置文件location /中加入如下代碼:

auth_basic "ELK Kibana Monitor Center";

auth_basic_user_file /usr/local/nginx/html/.htpasswd;

通過Apache加密工具htpasswd生成用戶名和密碼:

htpasswd -c /usr/local/nginx/html/.htpasswd admin

技術分享圖片

重啟Nginx web服務,訪問如下:

技術分享圖片

用戶名和密碼正確,即可登錄成功,如下圖所示:

技術分享圖片

技術分享圖片

技術分享圖片

10.企業級ELK日誌平臺實戰+http訪問安全認證