第1章 環境規划
1.1 ELK介紹
ELK是ElasticSerach、Logstash、Kibana三款產品名稱的首字母集合,用於日志的搜集和搜索。
Elasticsearch:是一個開源分布式搜索引擎,提供搜集、分析、存儲三大功能,特點是分布式、零配置、自動發現、索引自動分片、索引副本機制,restful風格接口,多數據源,自動搜索負載等。
Logstash:主要用來日志收集、分析、過濾日志的工具,支持大量數據獲取方式。一般工作方式為C\S架構,Client端安裝在需要收集日志的主機上,server端負責將收集到的各個節點日志進行過濾、修改等操作,然后一並發給elasticsearch。
Kibana:可以作為Logstash和elasticsearch提供的日志分析友好的UI界面,可以幫助匯總、分析和搜索重要數據日志。
Filebeat:輕量級數據收集引擎,ELK Stack 在 Agent 的第一選擇。
1.2 Filebeat工作原理
Prospector(勘測者):負責管理Harvester並找到所有讀取源。
filebeat.prospectors: - input_type: log paths: - /apps/logs/*/info.log
Prospector會找到/apps/logs/*目錄下的所有info.log文件,並為每個文件啟動一個Harvester。Prospector會檢查每個文件,看Harvester是否已經啟動,是否需要啟動,或者文件是否可以忽略。若Harvester關閉,只有在文件大小發生變化的時候Prospector才會執行檢查。只能檢測本地的文件。
1.3 ELk工作原理

1.4 環境說明
本次實戰需要兩台電腦(或者vmware下的兩個虛擬機),操作系統都是CentOS7,它們的身份、配置、地址等信息如下:
Hostname |
Ip地址 |
身份說明 |
配置 |
elk-server |
10.0.0.175 |
ELK服務端,接收日志,提供日志搜索服務 |
4G內存 |
docker01 |
10.0.0.110 |
Nginx服務端,Tomcat服務端產生的訪問日志通過上報到Logstash |
2G內存 |
運行時的部署情況如下圖所示:
1.5 業務要求
1、業務請求到達nginx-server機器上的Nginx;
2、Nginx響應請求,並在access.log文件中增加訪問記錄;
3、FileBeat搜集新增的日志,通過LogStash的5044端口上傳日志;
4、LogStash將日志信息通過本機的9200端口傳入到ElasticSerach;
5、搜索日志的用戶通過瀏覽器訪問Kibana,服務器端口是5601;
6、Kibana通過9200端口訪問ElasticSerach;
1.6 系統設置
1、設置hostname,打開文件/etc/hostname,將內容改為elk-server
2、關閉防火牆(如果因為其他原因不能關閉防火牆,也請不要禁止80端口):systemctl stop firewalld.service
3、禁止防火牆自動啟動:systemctl disable firewalld.service
4、打開文件vim /etc/security/limits.conf,添加下面四行內容:
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
5、打開文件vim /etc/sysctl.conf,添加下面一行內容:
vm.max_map_count=655360
加載sysctl配置,執行命令:sysctl -p
第2章 部署ELK
2.1 安裝JDK
下載地址:https://www.oracle.com/technetelk/java/javase/downloads/jdk8-downloads-2133151.html
推薦使用JDK版本為8系列。
elk-server服務器上面部署:
將下載好的JDK上傳到/opt目錄下面
cd /opt/
#進行解壓
tar xf jdk-8u181-linux-x64.tar.gz
#創建軟連接
ln -s jdk1.8.0_181 /opt/jdk
#定義環境變量
sed -i.ori '$a export JAVA_HOME=/opt/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
#注釋
export JAVA_HOME=/opt/jdk
<-- 定義jdk軟件程序目錄
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
<-- 定義jdk命令存在於環境變量中,可以直接使用
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
<-- 定義java程序運行所需的庫文件環境變量(classpath)
# 加載環境變量配置信息
source /etc/profile
# 確認檢查jdk版本信息
java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
2.2 部署elasticsearch
#創建目錄/usr/local/elk
mkdir /usr/local/elk
#進入該目錄中,下載軟件包
cd /usr/local/elk
#下載地址ELK官網https://www.elastic.co/downloads下載
#或者命令行上面直接下載
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
#下載完畢后,將壓縮包解壓到/usr/local/elk目錄下
tar xf elasticsearch-6.2.4.tar.gz tar xf logstash-6.2.4.tar.gz tar xf kibana-6.2.4-linux-x86_64.tar.gz
#創建軟連接
ln -s /usr/local/elk/elasticsearch-6.2.4 /usr/local/elk/elasticsearch ln -s /usr/local/elk/logstash-6.2.4 /usr/local/elk/logstash ln -s /usr/local/elk/kibana-6.2.4-linux-x86_64 /usr/local/elk/kibana
創建用戶:
ElasticSerach要求以非root身份啟動,所以我們要創建一個用戶:
創建用戶組:
groupadd elk
創建用戶加入用戶組:
useradd elk -g elk
創建日志文件
touch /usr/local/elk/elasticsearch/logs/elasticsearch.log
設置ElasticSerach文件夾為用戶elasticsearch所有:
chown -R elk. /usr/local/elk/elasticsearch/
啟動ElasticSerach
切換到用戶elasticsearch:su elasticsearch
su - elk
進入目錄/usr/local/elk/elasticsearch;執行啟動命令:bin/elasticsearch -d,此時會在后台啟動elasticsearch;
cd /usr/local/elk/elasticsearch
bin/elasticsearch -d
查看啟動日志可執行命令:tail -f /usr/local/elk/elasticsearch/logs/elasticsearch.log 提示如下:
tail -f /usr/local/elk/elasticsearch/logs/elasticsearch.log
通過ss -lntup查看端口號已經啟動
執行curl命令檢查服務是否正常響應:curl 127.0.0.1:9200,收到響應如下:
至此,ElasticSerach服務啟動成功,接下來是Logstash;
2.3 部署Logstash
#退出當前用戶,回到root用戶
在目錄cd /usr/local/elk/logstash下創建文件vim default.conf,內容如下:
# 監聽5044端口作為輸入 input { beats { port => "5044" } } # 數據過濾 filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } geoip { source => "clientip" } } # 輸出配置為本機的9200端口,這是ElasticSerach服務的監聽端口 output { elasticsearch { hosts => ["127.0.0.1:9200"] } }
后台啟動Logstash服務
nohup bin/logstash -f default.conf --config.reload.automatic &
查看啟動日志:tail -f logs/logstash-plain.log,啟動成功的信息如下:
通過ss -lntup查看端口號已經啟動
2.4 部署配置Kibana
打開Kibana的配置文件vim /usr/local/elk/kibana/config/kibana.yml,到第七行
#server.host: "localhost"改成如下內容:
server.host: "10.0.0.175"
這樣其他電腦就能用瀏覽器訪問Kibana的服務了;
進入Kibana的目錄:/usr/local/elk/kibana ;執行啟動命令:nohup bin/kibana &
cd /usr/local/elk/kibana
nohup bin/kibana &
查看啟動日志:tail -f nohup.out 以下信息表示啟動成功:
在瀏覽器訪問http://10.0.0.175:5601,看到如下頁面
至此,ELK服務啟動成功,接下來我們將業務日志上報上來,需要操作另一台電腦:docker01;
第3章 部署nginx-server
3.1 安裝nginx-server
在已經部署好的docker環境下,部署nginx-server
docker run --name nginx-server -d -p 80:80 -v /var/log/nginx:/var/log/nginx nginx:1.14
通過docker ps -a可以查看到服務已經運行
通過訪問頁面10.0.0.110
多刷新幾次,為增加日志,到此nginx-server部署完成
3.2 安裝FileBeat
在nginx-server電腦創建目錄/usr/local/elk
mkdir -p /usr/local/elk
進入/usr/local/elk目錄下執行以下命令,下載FileBeat安裝包
cd /usr/local/elk
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
下載完成后解壓壓縮包
tar -xf filebeat-6.2.4-linux-x86_64.tar.gz
ln -s /usr/local/elk/filebeat-6.2.4-linux-x86_64 /usr/local/elk/filebeat
打開文件/usr/local/elk/filebeat/filebeat.yml,修改以下內容:
24 enabled: true
28 - /var/log/nginx/*.log
143 #output.elasticsearch:
145 # hosts: ["localhost:9200"]
153 output.logstash:
155 hosts: ["10.0.0.175:5044"]
最后的配置文件為:
egrep -v '^$|#' /usr/local/elk/filebeat/filebeat.yml
filebeat.prospectors: - type: log enabled: true paths: - /var/log/nginx/*.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 3 setup.kibana: output.logstash: hosts: ["10.0.0.175:5044"]
啟動FileBeat
nohup ./filebeat -e -c filebeat.yml &>/dev/null &
至此,FileBeat也啟動成功了,接下來驗證服務;
第4章 Kibana頁面展示
通過瀏覽器多訪問幾次nginx服務,這樣能多制造一些訪問日志,訪問地址:http://10.0.0.110
訪問Kibana:http://10.0.0.175:5601,點擊左上角的Discover,如下圖紅框,可以看到訪問日志已經被ELK搜集了:
如下圖,輸入logstash-*,點擊”Next step”:
如下圖,選擇Time Filter,再點擊“Create index pattern”:
頁面提示創建Index Patterns成功:
點擊左上角的”Discover”按鈕,即可看到最新的日志信息,如下圖:
在下圖的此處可以關鍵詞搜索:error*,也可以查看nginx的報錯信息
至此,我們已經可以在ELK上查到Nginx的訪問日志了,接下來將Tomcat的日志也接進來;
第5章 安裝和啟動Tomcat
docker run --name tocat-server -d -p 8080:8080 -v /var/log/tomcat:/usr/local/tomcat/logs tomcat:latest
通過docker ps -a可以查看到服務已經運行
瀏覽器訪問:http://10.0.0.110:8080,看到啟動成功,如下圖
訪問Tomcat提供的example服務的子頁面,如下圖:
http://10.0.0.110:8080/examples/servlets/servlet/RequestInfoExample
至此,Tomcat已經啟動成功,接下來將Tomcat的訪問日志接入ELK;
5.3 部署filebea
Tomcat訪問日志接入ELK
打開FileBeat的配置文件vim /usr/local/elk/filebeat/filebeat.yml,在”filebeat.prospectors:”下面新增一個配置節點,內容如下
- type: log enabled: true paths: - /var/log/tomcat/localhost_access_log.*.txt
最后配置文件內容如下:
egrep -v '^$|#' /usr/local/elk/filebeat/filebeat.yml
filebeat.prospectors: - type: log enabled: true paths: - /var/log/nginx/*.log - type: log enabled: true paths: - /var/log/tomcat/* filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 3 setup.kibana: output.logstash: hosts: ["10.0.0.175:5044"]
重啟filebeat服務,首先找到這個進程,進行kill掉,再啟動filebeat
ps -ef|grep filebeat cd /usr/local/elk/filebeat nohup ./filebeat -e -c filebeat.yml &>/dev/null &
此時在Kibana頁面已經可以搜索到Tomcat的訪問日志,
以“RequestInfoExample”作為關鍵詞搜索也能搜到對應的訪問日志:
第六章 kibana平台增加安全認證
kibana是nodejs開發的,本身並沒有任何安全限制,直接瀏覽url就能訪問,如果公網環境非常不安全,可以通過nginx請求轉發增加認證,方法如下:
6.1 安裝nginx
yum install -y nginx
在kibana所在的服務器上安裝nginx服務,利用nginx的轉發指令實現。
安裝好nginx后,進入nginx配置頁面,修改如下:
user root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name elk.wzxmt.com; location / { root /usr/share/nginx/html; index index.html index.htm; proxy_set_header Host $host; proxy_pass http://127.0.0.1:5601; auth_basic "kibana login auth"; auth_basic_user_file /etc/nginx/Kbn_htpasswd; } } }
6.2 安裝生成密碼工具:
yum install httpd-tools
生成密碼文件:
[root@elk-server nginx]# htpasswd -bc /etc/nginx/Kbn_htpasswd wzxmt admin Adding password for user wzxmt [root@elk-server nginx]# chmod 400 /etc/nginx/Kbn_htpasswd
6.3 修改kibana、重啟kibana與nginx
vim /usr/local/work/kibana/config/kibana.yml server.host: "127.0.0.1"
重啟kibana與nginx就不再述說;
6.4 web測試
在web端測試訪問
輸入認證信息,即可訪問kibana
第7章 漢化kibana
7.1 安裝git
yum install -y git
7.2 下載漢化包
git clone https://github.com/anbai-inc/Kibana_Hanization.git
7.3 進行漢化
第一種方法:
cd Kibana_Hanization/old
python main.py /usr/local/elk/kibana/
/timelion.bundle.js]已翻譯。
....
恭喜,Kibana漢化完成!
第二種方法:
(1)拷貝此項目中的translations文件夾到您的kibana目錄下的src/legacy/core_plugins/kibana/目錄。若您的kibana無此目錄,那還是嘗試使用第一種方法。 (2)修改您的kibana配置文件kibana.yml中的配置項:i18n.locale: "zh-CN" (3)重啟Kibana,漢化完成
7.4 重啟kibana
可以看到漢化成功。
至此,ELK-6.2.4版本的服務和日志上報的搭建已經完成,后續如果還有業務服務器要上報日志,
只需按照上述步驟安裝和配置FileBeat即可;此次部署ELK,只是一個簡單的了解,后面還需繼續
研究ELK。