一、ELK 平臺介紹
1、ELK 概述
????????日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。
????????通常,日志被分散的儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日志管理,例如:開源的 syslog,將所有服務器上的日志收集匯總。
????????集中化管理日志后,日志的統計和檢索又成為一件比較麻煩的事情,一般我們使用 grep、awk 和 wc 等 Linux 命令能實現檢索和統計,但是對于要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
????????開源實時日志分析 ELK 平臺能夠完美的解決我們上述的問題,ELK 由 ElasticSearch、Logstash 和 Kiabana 三個開源工具組成。
工具名稱 簡介 Elasticsearch 開源分布式搜索引擎,特點有分布式、零配置、自動發現、索引自動分片、索引副本機制、restful 風格接口、多數據源、自動搜索負載等 Logstash 完全開源工具,可對日志進行收集、過濾,存儲供后續使用(如搜索 ) Kibana 開源免費工具,為 Logstash 和 Elasticsearch 提供日志分析友好的 Web 界面,助力匯總、分析和搜索重要數據日志
進行日志處理分析,一般需要經過一下幾步:
(1)將日志進行集中化管理
(2)將日志格式化(Logstash)并輸出到 Elasticsearch
(3)對格式化后的數據進行索引和存儲(Elasticsearch)
(4)前端數據的展示(Kibana)2、Elasticsearch
2.1、ElasticSearch 概述
????????Elasticsearch 是一個基于 Lucene 的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 開發的,并作為 Apache 許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
2.2 Elasticsearch 核心概念
(1)接近實時(NRT)
????????Elasticsearch 是一個接近實時的搜索平臺。這意味著,從索引一個文檔直到這個文檔能夠被搜索到有一個輕微的延遲(通常是 1 秒)。
(2)集群(cluster)
一個集群就是由一個或多個節點組織在一起,它們共同持有你整個的數據,并一起提供索引和搜索功能。一個集群由一個唯一的名字標識,這個名字默認就是 “elasticsearch”。這個名字是重要的,因為一個節點只能通過指定某個集群的名字,來加入這個集群。
(3)節點(node)
????????一個節點是你集群中的一個服務器,作為集群的一部分,它存儲你的數據,參與集群的索引和搜索功能。和集群類似,一個節點也是由一個名字來標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節點。這個名字對于管理工作來說挺重要的,因為在這個管理過程中,你會去確定網絡中的哪些服務器對應于 Elasticsearch 集群中的哪些節點。
一個節點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節點都會被安排加入到一個叫做 “elasticsearch” 的集群中,這意味著,如果你在你的網絡中啟動了若干個節點,并假定它們能夠相互發現彼此,它們將會自動地形成并加入到一個叫做 “elasticsearch” 的集群中。
在一個集群里,只要你想,可以擁有任意多個節點。而且,如果當前你的網絡中沒有運行任何 Elasticsearch 節點,這時啟動一個節點,會默認創建并加入一個叫做 “elasticsearch” 的集群。(4)索引(index)
????????一個索引是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),并且當我們要對對應于這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集群中,可以定義任意多的索引。
(5)類型(type)
????????在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類 / 分區,其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客平臺并且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客數據定義另一個類型,當然,也可以為評論數據定義另一個類型。
(6)文檔(document)
????????一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以 JSON(Javascript Object Notation)格式來表示,而 JSON 是一個到處存在的互聯網數據交互格式。
在一個 index/type 里面,你可以存儲任意多的文檔。注意,盡管一個文檔,物理上存在于一個索引之中,文檔必須被索引 / 賦予一個索引的 type。(7)分片和復制(shards & replicas)
????????一個索引可以存儲超出單個節點硬件限制的大量數據。比如,一個具有 10 億文檔的索引占據 1TB 的磁盤空間,而任一節點都沒有這樣大的磁盤空間;或者單個節點處理搜索請求,響應太慢。為了解決這個問題,Elasticsearch 提供了將索引劃分成多份的能力,這些份就叫做分片。當你創建一個索引的時候,你可以指定你想要的分片的數量。每個分片本身也是一個功能完善并且獨立的 “索引”,這個 “索引” 可以被放置到集群中的任何節點上。分片很重要,主要有兩方面的原因:
1)允許你水平分割 / 擴展你的內容容量。
2)允許你在分片(潛在地,位于多個節點上)之上進行分布式的、并行的操作,進而提高性能 / 吞吐量。
????????至于一個分片怎樣分布,它的文檔怎樣聚合回搜索請求,是完全由 Elasticsearch 管理的,對于作為用戶的你來說,這些都是透明的。
????????在一個網絡 / 云的環境里,失敗隨時都可能發生,在某個分片 / 節點不知怎么的就處于離線狀態,或者由于任何原因消失了,這種情況下,有一個故障轉移機制是非常有用并且是強烈推薦的。為此目的,Elasticsearch 允許你創建分片的一份或多份拷貝,這些拷貝叫做復制分片,或者直接叫復制。
????????復制之所以重要,有兩個主要原因:在分片 / 節點失敗的情況下,提供了高可用性。因為這個原因,注意到復制分片從不與原 / 主要(original/primary)分片置于同一節點上是非常重要的。擴展你的搜索量 / 吞吐量,因為搜索可以在所有的復制上并行運行。總之,每個索引可以被分成多個分片。一個索引也可以被復制 0 次(意思是沒有復制)或多次。一旦復制了,每個索引就有了主分片(作為復制源的原來的分片)和復制分片(主分片的拷貝)之別。分片和復制的數量可以在索引創建的時候指定。在索引創建之后,你可以在任何時候動態地改變復制的數量,但是你事后不能改變分片的數量。
????????默認情況下,Elasticsearch 中的每個索引被分片 5 個主分片和 1 個復制,在兩個節點的場景中,每個索引將會有 5 個主分片和另外 5 個副本分片,每個索引總共就有 10 個分片。但是在 Elasticsearch 7.0 以后的版本中默認分片數做了調整中,默認索引的主分片(Primary Shards)數量為 1,副本分片(Replica Shards)數量為 13、Logstash
3.1 Logstash 介紹
Logstash 有 JRuby 語言編寫,運行在 Java 虛擬機(JVM)上,是一款強大的數據處理工具,可以實現數據傳輸、格式處理、格式化輸出。Ligstash 具有強大的插件功能,常用于日志處理。
Logstash 的設計理念:Logstash 只做三件事,數據輸入、數據加工、數據輸出3.2、Logstash 工作的三個階段
(1)input 數據輸入端,可以接收來自任何地方的源數據
插件 功能描述 file 從文件中讀取 syslog 監聽在 514 端口的系統日志信息,并解析成 RFC3164 格式 redis 從 redis - server list 中獲取,并解析成 RFC3164 格式 beat 接收來自 Filebeat 的事件 (2)Filter 數據中轉層,主要進行格式處理,數據類型轉換、數據過濾、字段添加,修改等,常用的過濾器如下。
插件 功能描述 grok 通過正則解析和結構化任何文本 mutate 在事件字段執行一般的轉換,可重命名、刪除、替換和修改事件字段 drop 完全丟棄事件,如 debug 事件 clone 復制事件,可能添加或者刪除字段 geoip 添加有關 IP 地址地理位置信息 (3)output 是 logstash 工作的最后一個階段,負責將數據輸出到指定位置,兼容大多數應用,常用的有:elasticsearch:發送事件數據到 Elasticsearch,便于查詢,分析,繪圖。
插件 功能描述 elasticsearch 發送事件數據到 Elasticsearch,便于查詢、分析、繪圖 file 將事件數據寫入到磁盤文件上 mongodb 將事件數據發送至高性能 NoSQL mongodb,便于永久存儲、查詢、分析,大數據分片 redis 將數據發送至 redis - server,常用于中間層暫時緩存 graphite 發送事件數據到 graphite 4、Kibana
4.1 Kibana 介紹
????????Kibana 是一個設計使用和 Elasticsearch 配置工作的開源分析和可視化平臺。可以用它進行搜索、查看、集成 Elasticsearch 中的數據索引。可以利用各種圖表、報表、地圖組件輕松的對數據僅進行可視化分析
4.2、Kibana 主要功能
Elasticsearch 無縫集成
整合數據
復雜數據分析
讓更多的團隊成員收益
接口靈活
配置簡單
可視化多數據源
簡單數據導出二、實驗案例
拓撲
資源列表
主機名 ip 地址 操作系統 軟件包 - 192.168.10.101 Openeuler24 filebeat、httpd - 192.168.10.102 Openeuler24 logstash elk1 192.168.10.103 Openeuler24 Elasticsearch、kibana elk2 192.168.10.104 Openeuler24 Elasticsearch 1、基礎配置
1.1、關閉防火墻及內核保護
hostnamectl set-hostname elk1 hostnamectl set-hostname elk2vim /etc/hosts ###添加內容### 192.168.10.103 elk1 192.168.10.104 elk2systemctl stop firewalld systemctl disable firewalld setenforce 0vim /etc/selinux/config ###編輯內容### SELINUX=disabled
1.2、添加程序用戶
useradd elk passwd elk ###密碼“elk”######加入到wheel組中 gpasswd -a elk wheel###關閉命令使用認證 visudo###編輯內容### %wheel ALL=(ALL) NOPASSWD: ALL ###110行###切換到程序用戶并加載完整的環境### su - elk
1.3、部署環境
sudo dnf -y install java
1.4、修改用戶可用的硬件資源
sudo vim /etc/security/limits.conf ###添加內容### elk soft nofile 65535 elk hard nofile 65535 elk soft nproc 65535 elk hard nproc 65535 elk soft memlock unlimited elk hard memlock unlimited
1.5、從內核方面為進程分配更大的可用內存區
sudo vim /etc/sysctl.conf ###添加內容### vm.max_map_count=655360
1.6、重啟加載配置文件
sudo reboot
2.安裝elasticsearch
2.1、切換到指定目錄拉取安裝包
cd /opt su - elk
2.2、解壓elasticsearch并移動到合適位置
sudo tar zxf elasticsearch-7.10.0-linux-x86_64.tar.gz sudo mv elasticsearch-7.10.0 /usr/local/elasticsearch
2.3、編輯JAVA文件
sudo vim /usr/local/elasticsearch/config/jvm.options ###編輯內容### -Xms2g -Xmx2g
2.4、修改elasticsearch配置文件
sudo vim /usr/local/elasticsearch/config/elasticsearch.yml###編輯內容### cluster.name: aaa node.name: elk1 path.data: /path/to/data path.logs: /path/to/logs bootstrap.memory_lock: false network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["elk1", "elk2"] cluster.initial_master_nodes: ["elk1"]
2.5、創建數據存放路徑
sudo mkdir -p /path/to/data sudo mkdir -p /path/to/logs sudo chown -R elk:elk /path sudo chown -R elk:elk /usr/local/elasticsearch/
2.6、啟動并查看監聽
/usr/local/elasticsearch/bin/elasticsearch & netstat -anpt | grep 9200
3、安裝logstash
3.1、關閉防火墻及內核保護
systemctl stop firewalld setenforce 0 dnf -y install java tar zxf logstash-7.10.0-linux-x86_64.tar.gz mv logstash-7.10.0 /usr/local/logstash chmod -R 777 /usr/local/logstash/data/
3.2、編輯配置文件
chmod o+r /var/log/messages touch /usr/local/logstash/system.conf vim /usr/local/logstash/system.conf###編輯內容### input {file {path => "/var/log/messages"type => "system"start_position => "beginning"}}output {elasticsearch {hosts=> ["192.168.10.103:9200","192.168.10.104:9200"]index=> "system-%{+YYYY.MM.dd}"}}
3.3、啟動并查看監聽
/usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf & netstat -anpt | grep java
4、部署filebeat
4.1、安裝apache
systemctl stop firewalld setenforce 0 dnf -y install httpd systemctl start httpd echo "filebeataaaaaa" > /var/www/html/index.html
4.2、安裝filebeat
tar zxf filebeat-7.10.0-linux-x86_64.tar.gz mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat cd /usr/local/filebeat/ mv filebeat.yml filebeat.yml.bak vim filebeat.yml ###編輯內容### filebeat.inputs: - type: logpaths:- /var/log/httpd/access_logoutput.logstash:hosts: ["192.168.10.102:5044"]###檢查配置文件### ./filebeat test config -c filebeat.yml
4.3、修改用戶可用的硬件資源
vim /etc/security/limits.conf ###編輯內容### * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 * soft memlock unlimited * hard memlock unlimitedvim /etc/sysctl.conf ###編輯內容### vm.max_map_count=655360
4.4、啟動filebeat服務
/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml &
4.5、查看監聽
netstat -anpt | grep filebeat
4.6、修改 logstash 的配置文件,使日志輸出到 elasticsearch
vim /usr/local/logstash/config/beats.conf ###編輯內容### input {beats {port => "5044"codec => "json"} }output {elasticsearch {hosts => ["192.168.10.103:9200"]index => "weblog-beat-%{+YYYY.MM.dd}"} }
4.7、運行服務
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &
5、安裝 Kibana
5.1、在 elk1 上安裝 Kibana
tar zxf kibana-7.10.0-linux-x86_64.tar.gz mv kibana-7.10.0-linux-x86_64 /usr/local/kibana
5.2、修改配置文件
vim /usr/local/kibana/config/kibana.yml ###編輯內容### server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://192.168.10.103:9200"] kibana.index: ".kibana" i18n.locale: "zh-CN"
5.3、修改歸屬并啟動服務
chown -R elk:elk /usr/local/kibana/ su - elk /usr/local/kibana/bin/kibana &
5.4、訪問:
http://192.168.10.103:5601