一、ELK日志分析系統
- ELK有三部分組成
E:Elasticsearch
L:Logstash
K:Kibana
1、日志服務器
- 優點
提高安全性
集中化管理 - 缺點
對日志分析困難
2、日志處理步驟
1、將日志進行集中化管理
2、將日志格式化(Logstash)並輸出到Elasticsearch
3、對格式化后的數據進行索引和存儲(Elasticsearch)
4、前端數據的展示(Kibana)
二、Elasticsearch概述
- 提供了一個分布式多用戶能力的全文搜索引擎
1、Elasticsearch特性
- 接近實時
- 集群
- 節點
- 索引
索引(庫)→類型(表)→文檔(記錄) - 分片和副本
實際情況下,索引存儲的數據可能超過單個節點的硬件限制,如一個10億文檔需1TB空間可能不適合存儲在單個節點的磁盤上,或者從單個節點搜索請求太慢了,為了解決這個問題,elasticsearch提供將索引分成多個分片的功能,當在創建索引時,可以定義想要分片的數量。每個分片就是一個全功能的獨立索引,可以位於集群中任何節點上。
分片:
1、水平分割擴展,增大存儲量
2、分布式並行跨分片操作,提供性能和吞吐量
分布式分片的機制和搜索請求的文檔如何匯總完全是有elasticsearch控制的,這些對用戶而言是透明的
網絡問題等等其他問題可以在任何時候不期而至,為了健壯性,強烈建議要有個故障切換機制,無論何種故障以防止分片或者節點不可用,為此,elasticsearch讓我們將索引分片復制一份或多份,稱為分片副本或副本
副本:
1、高可用性,以應對分片或者節點故障,出於這個原因,分片副本要在不同的節點上
2、性能加強,增加吞吐量,搜索可以並行在所有副本上執行
三、LogStash概述
- 一款強大的數據處理工具
- 可實現數據傳輸、格式處理、格式化輸出
- 數據輸入、數據加工(如過濾,改寫等)以及數據輸出
由三個組件組成:Input、Output、Filter Plugin
- Input:獲取日志
- Output:輸出日志
- Filter Plugin:過濾日志、格式處理
1、LogStash主要組件
- Shipper
- Indexer
- Broker
- Search and Storage
- Web Interface
四、Kibana概述
- 一個針對Elasticsearch的開源分析及可視化平台
- 搜索、查看存儲在Elasticsearch索引中的數據
- 通過各種圖表進行高級數據分析及展示
1、Kibana主要功能
- Elasticsearch無縫之集成
- 整合數據,復雜數據分析
- 讓更多團隊成員收益
- 接口靈活,分享更容易
- 配置簡單、可視化多數據源
- 簡單數據導出
五、部署ELK日志分析系統
1、實驗需求
1、配置ELK日志分析集群
2、使用Logstash收集日志
3、使用Kibana查看分析日志
2、環境配置
主機 | 操作系統 | IP地址 | 安裝包 / 軟件 / 工具 |
node1 | CentOS7 | 192.168.159.10 | Elasticsearch |
node2 | CentOS7 | 192.168.159.20 | Elasticsearch |
apache | CentOS7 | 192.168.159.30 | httpd / Logstash |
真機 | Windows | 192.168.159.1 | ————————— |
所有節點,關閉系統防火牆和安全機制
systemctl stop firewalld.service setenforce 0
node1(192.168.159.10)
hostnamectl set-hostname node1 su -
node2(192.168.159.20)
hostnamectl set-hostname node2 su -
apache(192.168.159.30)
hostnamectl set-hostname apache su -
3、配置elasticsearch環境(node1、node2)
node1(192.168.184.10)
node2(192.168.184.20)
僅一處主機名不同,已標注
echo '192.168.184.10 node1' >> /etc/hosts echo '192.168.184.20 node2' >> /etc/hosts cd /opt rz elasticsearch-5.5.0.rpm rpm -ivh elasticsearch-5.5.0.rpm systemctl daemon-reload systemctl enable elasticsearch.service
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak vim /etc/elasticsearch/elasticsearch.yml ==17== cluster.name: my-elk-cluster ==23== node.name: node1 #這里node2節點設置為node2 ==33== path.data: /data/elk_data ==37== path.logs: /var/log/elasticsearch/ ==43== bootstrap.memory_lock: false ==55== network.host: 0.0.0.0 ==59== http.port: 9200 ==68== discovery.zen.ping.unicast.hosts: ["node1", "node2"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml mkdir -p /data/elk_data chown elasticsearch:elasticsearch /data/elk_data/ systemctl start elasticsearch netstat -antp |grep 9200
1、此時可真機訪問,查看節點信息
http://192.168.184.10:9200 http://192.168.184.20:9200
2、真機檢測集群健康、查看集群狀態
http://192.168.184.10:9200/_cluster/health?pretty http://192.168.184.20:9200/_cluster/health?pretty
http://192.168.184.10:9200/_cluster/state?pretty http://192.168.184.10:9200/_cluster/state?pretty
4、 安裝elasticsearch-head插件
上述查看集群的方式,及其不方便,我們可以通過安裝elasticsearch-head插件后,來管理集群
node1(192.168.159.10)
node2(192.168.159.20)
cd /usr/local/src rz phantomjs-2.1.1-linux-x86_64.tar.bz2 tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 cd phantomjs-2.1.1-linux-x86_64/bin cp phantomjs /usr/local/bin cd /usr/local/src/ rz elasticsearch-head.tar.gz tar xzvf elasticsearch-head.tar.gz
cd elasticsearch-head/ npm install vim /etc/elasticsearch/elasticsearch.yml ==末行插入== http.cors.enabled: true http.cors.allow-origin: "*" systemctl restart elasticsearch cd /usr/local/src/elasticsearch-head/ npm run start & netstat -lnupt |grep 9100 netstat -lnupt |grep 9200
真機上打開瀏覽器輸入
http://192.168.184.10:9100 http://192.168.184.20:9100
可以看見群集很健康是綠色
在Elasticsearch 后面的欄目中輸入
http://192.168.184.10:9200 http://192.168.184.20:9200
然后點連接 會發現:集群健康值: green (0 of 0)
●node1信息動作
★node2信息動作
node1(192.168.159.10)
索引為index-demo,類型為test,可以看到成功創建
真機訪問,查看索引信息
http://192.168.184.10:9100
上面圖可以看見索引默認被分片5個,並且有一個副本
5、安裝logstash
安裝logstash並做一些日志搜集輸出到elasticsearch中
apache(192.168.159.30)
yum -y install httpd systemctl start httpd cd /opt rz logstash-5.5.1.rpm rpm -ivh logstash-5.5.1.rpm systemctl start logstash.service systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ logstash -e 'input { stdin{} } output { stdout{} }' Logstash API endpoint {:port=>9600} www.baidu.com ####需要輸入www.baidu.com 2018-10-12T02:10:11.313Z apache www.baidu.com www.sina.com.cn ####需要輸入www.sina.com.cn 2018-10-12T02:10:29.778Z apache www.sina.com.cn Ctrl + c
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }' Logstash API endpoint {:port=>9600} www.baidu.com { "@timestamp" => 2018-10-12T02:15:39.136Z, "@version" => "1", "host" => "apache", "message" => "www.baidu.com" } Ctrl + c
1、使用logstash將信息寫入elasticsearch中,輸入 輸出 對接
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.184.10:9200"] } }' Logstash API endpoint {:port=>9600} www.baidu.com ###輸入內容 www.sina.com.cn ###輸入內容 www.google.com.cn ###輸入內容 Ctrl c
真機訪問,查看索引信息
打開瀏覽器 輸入http://192.168.159.10:9100/ 查看索引信息
多出 logstash-21.03.04
2、apache(192.168.184.30)做對接配置
chmod o+r /var/log/messages ll /var/log/messages vim /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.184.10:9200"] index => "system-%{+YYYY.MM.dd}" } }
systemctl restart logstash.service
真機
打開瀏覽器 輸入http://192.168.159.10:9100/ 查看索引信息###
多出 system-2021.03.04
6、在node1主機安裝kibana
cd /usr/local/src/ rz kibana-5.5.1-x86_64.rpm rpm -ivh kibana-5.5.1-x86_64.rpm cd /etc/kibana/ cp kibana.yml kibana.yml.bak vim kibana.yml 2/ server.port: 5601 #kibana打開的端口 7/ server.host: "0.0.0.0" #kibana偵聽的地址 21/ elasticsearch.url: "http://192.168.184.10:9200" #和elasticsearch建立聯系 30/ kibana.index: ".kibana" #在elasticsearch中添加.kibana索引 systemctl start kibana.service systemctl enable kibana.service
真機訪問
192.168.159.10:5601
首次登錄創建一個索引 名字:system-* ##這是對接系統日志文件
Index name or pattern ###下面輸入system-*
然后點最下面的出面的create 按鈕創建
然后點最左上角的Discover按鈕 會發現system-*信息
然后點下面的host旁邊的add 會發現右面的圖只有 Time 和host 選項了 這個比較友好
7、對接apache日志文件(訪問、錯誤)
cd /etc/logstash/conf.d/ vim apache_log.conf input { 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] == "access" { elasticsearch { hosts => ["192.168.184.10:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.184.10:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } /usr/share/logstash/bin/logstash -f apache_log.conf
真機
打開輸入http://192.168.184.30
打開瀏覽器 輸入http://192.168.184.10:9100/ 查看索引信息
能發現
apache_error-2021.03.04 apache_access-2021.03.04