【筆記】草履蟲也能看懂的ELK搭建流程


環境需要

  1. Elasticsearch需要JAVA環境,至少是JDK1.8
  2. elasticsearch 不允許root用戶使用,需要新增個elk用戶
  3. 如果覺得官網下載太慢,可以使用這個
    https://pan.baidu.com/s/1LndFYnnZQwFx2-MlDZXdaQ
    提取碼:7qnk

Elasticsearch

下載及安裝

  1. 如果網絡狀況好,可以考慮在線安裝,比較省事
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.2-linux-x86_64.tar.gz.sha512 #校驗
#校驗的正常輸出為 elasticsearch-{version}-linux-x86_64.tar.gz: OK
tar -xzf elasticsearch-7.6.2-linux-x86_64.tar.gz
cd elasticsearch-7.6.2/ 
  1. 或者下載離線包,然后手動上傳到服務器去解壓。Elasticsearch官網下載地址
    找到 Install Elasticsearch from archive on Linux or MacOS ,點進去就自動下載了。

  2. 或者參考這篇文章的安裝方式 快速搭建ELK日志分析系統

注意!我這里使用的版本是7.6.2,ELK三個軟件的版本需要保持一致才可以。

配置文件

cluster.name: demo
node.name: node-1
path.data: /data/es-data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["node-1"]

注意!配置文件中的path.logs和path.data這倆文件夾都要把權限賦給elk用戶!不然運行時就會報錯。

  chown -R elk.elk 文件夾路徑

運行測試

在elasticsearch的根目錄

#運行elasticsearch:
bin/elasticsearch &

#檢查端口
netstat -antp |grep 9200

#測試接口訪問
curl http://127.0.0.1:9200/
#返回結果如下則表示運行成功:
{
  "name" : "node-1",
  "cluster_name" : "demo",
  "cluster_uuid" : "PLIR2GguShK5RtDlE7xFeQ",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

ElasticsearchAPI

Elasticsearch提供了API來方便用戶使用,具體可以參考這篇 Elasticsearch 快速開始
下面是兩個常用的API,用來查看logstash是否成功將消息傳入了Elasticsearch

1. 查看全部索引
curl -X GET "localhost:9200/_cat/indices?v"

2. 查看某個索引中的所有文檔
curl -X GET "http://localhost:9200/索引名稱/_search?q=*&pretty"

插件(可選項)

安裝elasticsearch-head插件

  1. 使用docker安裝,省時省力
    docker run -p 9100:9100 mobz/elasticsearch-head:5
  1. 或使用git安裝
    yum install -y npm
    git clone git://github.com/mobz/elasticsearch-head.git
    cd elasticsearch-head
    npm install
    npm run start
  1. 測試訪問
  netstat -antp |grep 9100 #查看端口運行情況

在瀏覽器上訪問 http://IP:9100/ 查看是否成功啟動

Logstash

下載

官方網站中提供了tar.gz安裝包和在線下載,自行選擇。 官方下載地址
往下翻還有安裝配置指引,講真還是蠻細心的。

測試

  bin/logstash -e 'input { stdin { } } output { stdout {} }'

成功運行的話,應當是你輸入什么,他就給你返回什么,而且是帶有time和host的格式化輸出

配置

新建個配置文件,比如elk.conf,如下輸入並保存

  input { stdin { } }
  output {
    elasticsearch { hosts => ["elasticsearch服務的IP:9200"] }
    stdout { codec => rubydebug }
  }

運行

通過剛才新建的配置文件來啟動logstash

  logstash -f ./elk.conf

這時,你輸入進去的信息,就會被發往兩個地方,一個是發給elasticsearch,另一個是由標准輸出顯示出去。
最好也是用elk這個用戶來運行,報錯的話注意看是否是沒有寫權限。我用elk用戶運行Elasticsearch之后,再用root用戶運行Logstash時,發現無法查詢到輸入的信息。

Kibana

下載

官方下載地址

配置

解壓之后,開始配置Logstash

編輯kibana的配置文件
vim kibana/config/kibana.yml

修改配置文件如下,開啟以下的配置
server.port: 5601

server.host: "0.0.0.0"

elasticsearch.url: "http://192.168.1.202:9200"

kibana.index: ".kibana" 
#設置為中文
i18n.locale: "zh-CN"

運行

#這里仍是使用elk用戶運行
bin/kibana

運行成功后,kibana會自動去按照配置中的路徑去連接Elasticsearch,如果沒連接上,他會有提示並且一直重復嘗試連接。

測試與使用

在瀏覽器中輸入地址:http://IP:5601就可以啦!不過第一次進入可能會很慢。
然后就是去連接Elasticsearch中的Logstash索引。
選擇使用 Elasticsearch 數據
下面會列出來Elasticsearch 中可用的索引,選擇logstash,下一步,配置時間索引,點擊完成就OK啦。在這里插入圖片描述
然后左側菜單欄的第二個按鈕,進入Discover頁面,選擇logstash索引,此時可能會發現,哎?怎么沒數據,那就請注意你的右上角時間篩選是否默認為最近十五分鍾了,更改時間篩選條件后再次查詢,就可以順利查到你剛才在logstash里面傳進去的消息啦!
此圖片沒有描述

至此,基礎的搭建工作告一段落。當我看到我在logstash命令行中傳入的那些數據真的可以在Kibana的頁面中顯示出來的時候,真的是滿滿的成就感,就像搭積木一樣的把這三個工具拼接到了一起,很開心。
但是之后才是真正學習的開始,下一步是讓logstash從日志文件中實時讀取信息傳入Elasticsearch 中,還要去學習如何更好的使用這三個軟件,任重道遠。

報錯解決

max virtual memory areas vm.max_map_count is too low

參考此處 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

elasticsearch進程莫名其妙關閉了?

內存占用過大,系統會oom kill掉占用最大內存的進程(沒辦法,測試用的雲服務器是最低的配置)。
關掉oom kill(不推薦在生產環境使用):

 vm.panic_on_oom = 1 //1表示關閉,默認為0表示開啟OOM
  sysctl -p

最后

參考文章:

附 有錢人的做法

騰訊雲 自助搭建 ELK 日志服務


免責聲明!

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



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