1. 程式人生 > 其它 >Elasticsearch之分散式日誌ELK Stack

Elasticsearch之分散式日誌ELK Stack

@

目錄

Elasticsearch之分散式日誌ELK Stack:https://blog.csdn.net/weixin_42526326/article/details/121302809

Elasticsearch官方使用者手冊:https://www.elastic.co/guide/en/elasticsearch/reference/7.15/index.html

Kibana官方使用者手冊:https://www.elastic.co/guide/cn/kibana/current/index.html

基本介紹

  • 什麼是分散式日誌

在分散式應用中,日誌被分散在儲存不同的裝置上。如果你管理數十上百臺伺服器,你還在使用依次登入每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。所以我們使用集中化的日誌管理,分散式日誌就是對大規模日誌資料進行採集、追蹤、處理。

  • 為什麼要使用分散式日誌

一般我們需要進行日誌分析場景:直接在日誌檔案中grepawk就可以獲得自己想要的資訊。但在規模較大的場景中,此方法效率低下,面臨問題包括日誌量太大如何歸檔、文字搜尋太慢怎麼辦、如何多維度查詢。需要集中化的日誌管理,所有伺服器上的日誌收集彙總。常見解決思路是建立集中式日誌收集系統,將所有節點上的日誌統一收集,管理,訪問。

  • ELK 分散式日誌

實際上ELK是三款軟體的簡稱,分別是ElasticsearchLogstashKibana組成。

Elasticsearch 基於java,是個開源分散式搜尋引擎,它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料來源,自動搜尋負載等。

Kibana 基於nodejs,也是一個開源和免費的工具,Kibana可以為LogstashElasticSearch提供的日誌分析友好的Web 介面,可以彙總、分析和搜尋重要資料日誌。

Logstash 基於java,是一個開源的用於收集,分析和儲存日誌的工具。

下面是ELK的工作原理:

ElasticSearch

簡介

ElasticSearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。

我們建立一個網站或應用程式,並要新增搜尋功能,但是想要完成搜尋工作的建立是非常困難的。我們希望搜尋解決方案要執行速度快,我們希望能有一個零配置和一個完全免費的搜尋模式,我們希望能夠簡單地使用JSON通過HTTP來索引資料,我們希望我們的搜尋伺服器始終可用,我們希望能夠從一臺開始並擴充套件到數百臺,我們要實時搜尋,我們要簡單的多租戶,我們希望建立一個雲的解決方案。因此我們利用Elasticsearch來解決所有這些問題及可能出現的更多其它問題。

ElasticSearch是Elastic Stack的核心,同時Elasticsearch 是一個分散式、RESTful風格的搜尋和資料分析引擎,能夠解決不斷湧現出的各種用例。作為Elastic Stack的核心,它集中儲存您的資料,幫助您發現意料之中以及意料之外的情況。

下載

選擇需要的版本,目前高版本的已經需要JDK11支援

我本地和伺服器上都是使用7.13 + JDK 1.8 , 試了7.15版本不支援

官方下載地址

安裝

Windows

/elasticsearch 
或者
bin/elasticsearch.bat

Linux

  • 解壓到相應目錄
tar -zxvf elasticsearch-7.10.2-linux-x86_64.tar.gz -C /usr/local
  • 修改配置
cd /usr/local/elasticsearch-7.10.2/config/
vim elasticsearch.yml
node.name: node-1
path.data: /usr/local/elasticsearch-7.10.2/data
path.logs: /usr/local/elasticsearch-7.10.2/logs
network.host: 127.0.0.1
http.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
  • 建立es使用者 因為ElasticSearch不支援Root使用者直接操作,因此我們需要建立一個es使用者
useradd es
chown -R es:es /usr/local/elasticsearch-7.10.2

啟動

  • 切換使用者成es使用者進行操作
su - es
/usr/local/elasticsearch-7.10.2/bin/elasticsearch
  • 後臺啟動
/usr/local/elasticsearch-7.10.2/bin/elasticsearch -d 

在瀏覽器開啟9200埠地址: (http://120.78.129.95:9200/ (opens new window)),如果出現了下面的資訊,就表示已經成功啟動了

安全設定

修改配置檔案

修改config目錄下面的elasticsearch.yml檔案,在裡面新增如下內容,並重啟

關閉安全設定

xpack.security.enabled: false

開啟安全設定

xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true

設定使用者名稱和密碼

這裡需要為4個使用者分別設定密碼,elastic, kibana, logstash_system,beats_system

elastic 賬號:擁有 superuser 角色,是內建的超級使用者。
kibana 賬號:擁有 kibana_system 角色,使用者 kibana 用來連線 elasticsearch 並與之通訊。Kibana 伺服器以該使用者身份提交請求以訪問叢集監視 API 和 .kibana 索引。不能訪問 index。
logstash_system 賬號:擁有 logstash_system 角色。使用者 Logstash 在 Elasticsearch 中儲存監控資訊時使用。

cmd 命令列進入ES安裝目錄,執行下面的命令列

這裡在設定使用者名稱和密碼的時候都是隱式的設定,並非鍵盤有問題

bin/elasticsearch-setup-passwords interactive

修改使用者名稱和密碼

Linux伺服器

-- 建立超級使用者 TestSuper
elasticsearch-users useradd TestSuper -r superuser
-- 通過介面更改密碼
 curl -H "Content-Type:application/json" -XPOST -u elastic:now_password 'http://10.10.17.19:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'

windows

重灌大法

未完成,已崩潰,重啟中。。。

Logstash

簡介

Logstash是一個開源的伺服器端資料處理管道,能夠同時從多個來源採集資料,轉換資料,然後將資料傳送到最喜歡的儲存庫中(我們的儲存庫當然是ElasticSearch)

下載

到官網下載: (https://www.elastic.co/cn/downloads/logstash (opens new window))

安裝

  • 解壓到相應目錄
tar -zxvf logstash-7.10.2.tar.gz -C /usr/local
  • 新增配置檔案
cd /usr/local/logstash-7.10.2/bin
vim logstash-elasticsearch.conf
input {
	stdin {}
}
output {
	elasticsearch {
		hosts => '120.78.129.95:9200'
	}
	stdout {
		codec => rubydebug
	}
}

啟動

./logstash -f logstash-elasticsearch.conf

Kibana

簡介

Kibana 是一款開源的資料分析和視覺化平臺,它是 Elastic Stack 成員之一,設計用於和 Elasticsearch 協作。您可以使用 Kibana 對 Elasticsearch 索引中的資料進行搜尋、檢視、互動操作。您可以很方便的利用圖表、表格及地圖對資料進行多元化的分析和呈現。

下載

需要和es 同一個版本

到官網下載: (https://www.elastic.co/cn/downloads/kibana (opens new window))

安裝

  • 解壓到相應目錄
tar -zxvf kibana-7.10.2-linux-x86_64.tar.gz -C /usr/local
mv /usr/local/kibana-7.10.2-linux-x86_64 /usr/local/kibana-7.10.2
  • 修改配置
cd /usr/local/kibana-7.10.2/config
vim kibana.yml
server.port: 5601 
server.host: "0.0.0.0" 
elasticsearch.hosts: ["http://120.78.129.95:9200"] 
kibana.index: ".kibana"
  • 授權es使用者
chown -R es:es /usr/local/kibana-7.10.2/

啟動

  • 切換使用者成es使用者進行操作
su - es
/usr/local/kibana-7.10.2/bin/kibana 
  • 後臺啟動
/usr/local/kibana-7.10.2/bin/kibana &

在瀏覽器開啟5601埠地址: (http://120.78.129.95:5601/ (opens new window)),如果出現了下面的資訊,就表示已經成功啟動了

切換中文

config/kibana.yml新增

i18n.locale: "zh-CN"

日誌收集

對應伺服器安裝logstash,配置規則,例如新建logstash-apache.conf

input {
  file {
    path => "/home/ruoyi/logs/sys-*.log"
	start_position => beginning
	sincedb_path => "/dev/null"
	codec => multiline {
      pattern => "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}"
      negate => true
      auto_flush_interval => 3
      what => previous
    }
  }
}

filter {
  if [path] =~ "info" {
    mutate { replace => { type => "sys-info" } }
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
  } else if [path] =~ "error" {
    mutate { replace => { type => "sys-error" } }
  } else {
    mutate { replace => { type => "random_logs" } }
  }
}

output {
  elasticsearch {
    hosts => '120.78.129.95:9200'
  }
  stdout { codec => rubydebug }
}
  • 啟動logstash
./logstash -f logstash-apache.conf
  • 通過kibana視覺化檢索各個服務日誌資料

參考