您好,登錄后才能下訂單哦!
日志分析是我們運維解決系統故障、發現問題的主要手段。為了可以集中管理多臺服務器的日志記錄,開源實時日志分析ELK平臺應用而生,ELK由Elasticsearch、Logstash和Kibana三個開源工具組成,這三個工具可以分別部署在不同的服務器上,并且相互關聯,不過需要收集哪臺服務器的日志,就必須在該服務器上部署Logstash。ELK的官網是:https://www.elastic.co/cn/
.
ELK的工作原理如下(懂得其中原理,才可部署一個高可用的ELK平臺):
Logstash收集APPServer(應用服務器)產生的log,并存放到Elasticsearch群集中,而Kibana則從Elasticsearch群集中查詢數據生成圖表,在返回給browser(瀏覽器)。簡單來說,進行日志處理分析,一般需要以下幾個步驟:
- Logstash將日志進行集中化管理。
- 將日志格式化(Logstash)并輸出到Elasticsearch。
- Elasticsearch對格式化后的數據進行索引和存儲。
- Kibana對前端數據的展示。
搭建ELK平臺:
一、準備工作:
1、Node1、Node2節點內存最少分配4G,Apache節點無所謂。
2、下載所需軟件包:https://pan.baidu.com/s/1aP7GDiRBdXzCZBbgiP1fAw
提取碼:spuh
復制這段內容后打開百度網盤手機App,操作更方便哦三臺服務器都要掛載我提供的.iso文件。
3、修改節點服務器名稱,并通過本地/etc/hosts配置域名解析,檢查Java環境,必須是Java 1.8或更高的版本
4、放行防火墻相關端口的流量,為了方便我直接關閉了防火墻。
5、所有服務器的時間最好同步,可以搭建時間同步服務器,也可手動同步。
node1節點配置:
[root@node1 /]# hostname # 修改主機名
node1
[root@node1 /]# vim /etc/hosts # 配置解析文件,添加如下兩行
............................
192.168.1.10 node1
192.168.1.20 node2
[root@node1 /]# java -version # 檢查Java環境
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
node2節點配置(跟node1基本相似):
[root@node2 /]# hostname # 修改主機名
node2
[root@node2 /]# vim /etc/hosts # 編寫解析配置文件
..............................
192.168.1.10 node1 # 添加
192.168.1.20 node2 # 添加
[root@node2 /]# java -version # 檢查Java環境
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
二、安裝Elasticsearch:
1、node1配置:
[root@node1 /]# mount /dev/sr0 /media/ # 掛載elk軟件包
[root@node1 /]# cd /media/
[root@node1 media]# cp * /usr/src/ # 復制所有文件
[root@node1 media]# cd /usr/src/
[root@node1 src]# rpm -ivh elasticsearch-5.5.0.rpm # 安裝
[root@node1 src]# systemctl daemon-reload
[root@node1 src]# systemctl enable elasticsearch.service
[root@node1 /]# vim /etc/elasticsearch/elasticsearch.yml #修改主配置文件
#修改如下,注意刪除注釋符號
cluster.name: my-elk-cluster #群集名字
node.name: node1 #節點名字
path.data: /data/elk_data #數據存放路徑
path.logs: /var/log/elasticsearch/ #日志存放路徑
bootstrap.memory_lock: false #在啟動的時候不鎖定內存
network.host: 0.0.0.0 #提供服務綁定的IP地址,0.0.0.0代表所有地址
http.port: 9200 #偵聽端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] #群集發現通過單播實現
[root@node1 /]# mkdir -p /data/elk_data #創建數據存放目錄
[root@node1 /]# chown elasticsearch:elasticsearch #更改屬主及屬組 /data/elk_data/
[root@node1 /]# systemctl start elasticsearch.service # qi'do啟動服務
[root@node1 /]# netstat -anpt | grep 9200 #端口號不會立馬看到,啟動服務后再等待十秒左右才可查看到
tcp6 0 0 :::9200 :::* LISTEN 3992/java
2、node2配置:
[root@node2 /]# mount /dev/sr0 /media/ # 掛載elk軟件包
[root@node2 /]# cd /media/
[root@node2 media]# cp * /usr/src/
[root@node2 /]# cd /usr/src/
[root@node2 src]# rpm -ivh elasticsearch-5.5.0.rpm # 安裝
[root@node2 src]# systemctl daemon-reload
[root@node2 src]# systemctl enable elasticsearch.service
[root@node2 /]# scp root@192.168.1.10:/etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/ # 將node1配置文件復制過來
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ECDSA key fingerprint is 68:df:0f:ac:c7:75:df:02:88:7d:36:6a:1a:ae:27:23.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts.
root@192.168.1.10's password: # 輸入密碼
elasticsearch.yml 100% 2853 2.8KB/s 00:00
[root@node2 /]# vim /etc/elasticsearch/elasticsearch.yml #稍作修改
node.name: node2 #就更改一下節點名稱即可,其余不變
[root@node2 /]# mkdir -p /data/elk_data # 創建數據存放目錄
[root@node2 /]# chown elasticsearch:elasticsearch /data/elk_data/ # 設置屬主屬組
[root@node2 /]# systemctl start elasticsearch.service
[root@node2 /]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 4074/java
3、查看節點信息:
node1:
node2:
訪問http://192.168.1.10:9200/_cluster/health?pretty 查看群集的健康狀態:
訪問http://192.168.1.10:9200/_cluster/state?pretty 查看群集的狀態信息:
通過以上方式查看群集狀體對我們顯示的并不友好,可以通過安裝Elasticsearch-head插件,可以更方便的管理群集:
.
在node1安裝Elasticsearch-head插件(需要提前安裝node和phantomjs):
[root@node1 /]# cd /usr/src/
[root@node1 src]# tar zxf node-v8.2.1.tar.gz # 解壓node源碼包
[root@node1 src]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure && make && make install
#安裝,時間較長,約需40分鐘左右
[root@node1 src]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/ #復制該文件到指定目錄
[root@node1 src]# tar zxf elasticsearch-head.tar.gz
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install # 安裝依賴包
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#編輯主配置文件,在任意位置添加如下兩行:
http.cors.enabled: true #添加該行,開啟跨域訪問支持
http.cors.allow-origin: "*" #添加該行,跨域訪問允許的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service # 重啟服務使配置生效
[root@node1 elasticsearch-head]# npm run start &
#設置服務后臺啟動,如果前臺啟動,一旦關閉中斷,服務也將關閉。
#并且啟動服務時,必須在解壓后的elasticsearch-head下啟動服務,
#進程會讀取該目錄下的一個文件,否則可能啟動失敗。
[root@node1 /]# netstat -anpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 49967/grunt
[root@node1 /]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 49874/java
通過瀏覽器訪問http://192.168.1.10:9100 來查看群集信息:
4、安裝Kibana(可單獨安裝在一臺服務器上,本人囊中羞澀、資源有限,所以安裝在了node1上):
[root@node1 /]# cd /usr/src/
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 src]# systemctl enable kibana.service
[root@node1 src]# vim /etc/kibana/kibana.yml
........................ // 省略部分內容
server.port: 5601 #Kibana打開的端口
server.host: "0.0.0.0" #Kibana偵聽的地址,0.0.0.0代表該主機上的所有地址
elasticsearch.url: "http://192.168.1.10:9200" #和Elasticsearch建立連接
kibana.index: ".kibana" #在Elasticsearch中添加.kibana索引
[root@node1 src]# systemctl start kibana.service
5、配置apache服務器(自行搭建網站):
[root@Web ~]# systemctl start httpd #啟動httpd服務
[root@Web ~]# java -version #檢查Java環境是否為1.8
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@Web ~]# mount /dev/cdrom /media #掛載我提供的.iso文件
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@Web ~]# cd /media
[root@Web media]# rpm -ivh logstash-5.5.1.rpm #安裝logstash
[root@Web media]# systemctl daemon-reload
[root@Web media]# systemctl enable logstash.service #設置開機自啟動
[root@Web media]# cd /etc/logstash/conf.d/ #切換至指定路徑
[root@Web conf.d]# vim apache_log.conf #編輯采集apache日志文件和系統日志
#以下就以系統日志為例做解釋,其余的照著來就行,格式都差不多
input {
file{
path => "/var/log/messages" #指定要收集的日志文件
type => "system" #指定類型為system,可以自定義,type值和output{ } 中的type對應即可
start_position => "beginning" #從開始處收集
}
file{
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "system" { #如果type為system,
elasticsearch { #就輸出到Elasticsearch服務器
hosts => ["192.168.1.10:9200"] #Elasticsearch監聽地址及端口
index => "system-%{+YYYY.MM.dd}" #指定索引格式
}
}
if [type] == "access" {
elasticsearch {
hosts => ["192.168.1.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.1.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
#寫完保存退出即可。
[root@Web ~]# chmod o+r /var/log/messages #賦予該目錄其他人的讀權限
[root@Web conf.d]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#創建命令軟連接
[root@Web conf.d]# systemctl start logstash #啟動服務
[root@Web conf.d]# logstash -f apache_log.conf &
#指定剛才編寫文件為Logstash的配置文件,并且在后臺運行
6、創建索引:
1、通過瀏覽器訪問 http://192.168.1.10:9100 查看索引是否創建:
關于索引,有幾個很重要的概念:
剛才創建的索引,在我標記紅框中,可以看到node1和node2對應的位置,都有綠色背景的0、1、2、3、4、5表示是該索引被分為了5個分片,其中因為在Logstash中指定的Elasticsearch服務器是node1,所以node1的分片是主分片,node2會自動同步node1的分片,node2的分片為備份分片,稱為副本,用來提供數據冗余及負載分擔。默認情況下,Elasticsearch自動對索引請求進行負載分擔。
.
現在訪問http://192.168.1.10:5601 登錄到Kibana,添加索引:
關于apache的錯誤日志索引,自行添加即可,添加完畢后,單擊“discover”即可,在下面的下拉列表選擇一個索引,如apache_access-,可以查看相應的圖表及日志信息:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。