centos7.5部署ELk


第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工作原理

       Filebeat由兩個主要組件組成:prospectors 和 harvesters。這兩個組件協同工作將文件變動發送到指定的輸出中。
       Harvester(收割機):負責讀取單個文件內容。每個文件會啟動一個Harvester,每個Harvester會逐行讀取各個文件,並將文件內容發送到制定輸出中。Harvester負責打開和關閉文件,意味在Harvester運行的時候,文件描述符處於打開狀態,如果文件在收集中被重命名或者被刪除,Filebeat會繼續讀取此文件。所以在Harvester關閉之前,磁盤不會被釋放。默認情況filebeat會保持文件打開的狀態,直到達到close_inactive(如果此選項開啟,filebeat會在指定時間內將不再更新的文件句柄關閉,時間從harvester讀取最后一行的時間開始計時。若文件句柄被關閉后,文件發生變化,則會啟動一個新的harvester。關閉文件句柄的時間不取決於文件的修改時間,若此參數配置不當,則可能發生日志不實時的情況,由scan_frequency參數決定,默認10s。Harvester使用內部時間戳來記錄文件最后被收集的時間。例如:設置5m,則在Harvester讀取文件的最后一行之后,開始倒計時5分鍾,若5分鍾內文件無變化,則關閉文件句柄。默認5m)。

       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工作原理

       Logstash通過Filebeat收集AppServer產生的Log,並存放到ElasticSearch集群中,而Kibana則從ES集群中查詢數據生成圖表,再返回給Browser。

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

2Nginx響應請求,並在access.log文件中增加訪問記錄;

3FileBeat搜集新增的日志,通過LogStash5044端口上傳日志;

4LogStash將日志信息通過本機的9200端口傳入到ElasticSerach

5、搜索日志的用戶通過瀏覽器訪問Kibana,服務器端口是5601

6Kibana通過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; } } } 
上面的配置表示將http://elk.wzxmt.com的請求,轉發到服務器的5601端口,同時使用最基本的用戶名、密碼來認證。

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
由於我們nginx使用者為root,所以這一塊不需要授予屬組權限。

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM