天天看點

安裝 Kibana(本地及 Docker)- Elastic Stack 實戰手冊

安裝 Kibana(本地及 Docker)- Elastic Stack 實戰手冊
https://developer.aliyun.com/topic/download?id=1295 · 更多精彩内容,請下載下傳閱讀全本《Elastic Stack實戰手冊》 https://developer.aliyun.com/topic/download?id=1295 https://developer.aliyun.com/topic/es100 · 加入創作人行列,一起交流碰撞,參與技術圈年度盛事吧 https://developer.aliyun.com/topic/es100

創作人:陳晨

審稿人:劉帥

環境準備

Kibana 是一個基于 Nodejs 建構出來的前端項目,它本身不包含資料存儲功能,是以需要配合一個 Elasticsearch 節點/叢集一起進行使用。本節将從系統環境的選擇,必須的基礎應用的安裝等方面進行闡述。

環境選擇政策

  1. 作業系統
    1. 由于 Kibana 不能獨立存在,需要綁定一個Elasticsearch 節點/叢集,是以本文主要會以一個

      CentOS7

      系統來承載它配套的 Elasticsearch 節點。我們也将介紹其它常用作業系統的安裝。
    2. Kibana 可以支援的系統和 Elasticsearch 類似,可以大緻認為支援 Elasticsearch 的系統都可以承載 Kibana。
  2. 記憶體、CPU
    1. Kibana 是一個前端系統,綁定的 Elasticsearch 可以認為是它用來存取資料用的資料庫,是以不需要特别高的配置。
    2. 本文将以一個最小能夠順暢運作 Elasticsearch 節點的配置進行描述(

      1C2G

實際系統配置

Kibana 的系統安裝、配置和上一節 Elasticsearch 的安裝一緻,本節将不在贅述,隻保留最簡初始化方式。

  1. 修改源并安裝必要工具
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
        -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
        -i.bak \
        /etc/yum.repos.d/CentOS-Base.repo &&  \
        yum makecache && \
        yum update -y && \
        yum install -y epel-release && \
        yum install -y curl wget htop unzip && \
        yum install -y docker docker-compose
           
  1. 開啟

    docker

    服務
    1. systemctl start docker

    2. systemctl enable docker

小結

本節對 Kibana 節點部署所需環境對選擇政策、必備軟體等方面進行了闡述。

下載下傳、安裝及啟動

本節将對幾個主流的 Kibana 安裝部署的方式進行闡述,會對節點的安裝、部署、啟動、停機等流程進行較長的描述。

tar 包安裝

下載下傳連結(後面以

KIBANA_DOWNLOAD_URL

指代):

  1. https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz

下載下傳并解壓:

  1. mkdir -p /usr/local/kibana

  2. cd /usr/local/kibana

  3. wget -c ${KIBANA_DOWNLOAD_URL}

  4. tar vxf kibana-7.10.0-linux-x86_64.tar.gz

解壓出來的檔案:

[elasticsearch@esteam7002 kibana]$ ls -ltr kibana-7.10.0-linux-x86_64
總用量 1324
-rw-rw-r--   1 elasticsearch elasticsearch    3968 11月 10 06:16 README.txt -> 項目說明文檔
drwxrwxr-x   2 elasticsearch elasticsearch    4096 11月 10 06:16 plugins -> 插件檔案夾,目前為空,自定義插件會放置在這裡
-rw-rw-r--   1 elasticsearch elasticsearch     740 11月 10 06:16 package.json -> 項目打封包件
-rw-rw-r--   1 elasticsearch elasticsearch 1263836 11月 10 06:16 NOTICE.txt -> 一些協定的說明以及違反後果的警告
-rw-rw-r--   1 elasticsearch elasticsearch   13675 11月 10 06:16 LICENSE.txt -> 協定
drwxrwxr-x   2 elasticsearch elasticsearch    4096 11月 10 06:16 data -> Kibana 和它的插件寫本地檔案的檔案夾
drwxrwxr-x   2 elasticsearch elasticsearch    4096 4月  29 15:11 bin -> Kibana 内置指令行工具
drwxrwxr-x   4 elasticsearch elasticsearch    4096 4月  29 15:11 x-pack
drwxrwxr-x  11 elasticsearch elasticsearch    4096 4月  29 15:11 src
drwxrwxr-x   6 elasticsearch elasticsearch    4096 4月  29 15:11 node
drwxrwxr-x 995 elasticsearch elasticsearch   36864 4月  29 15:11 node_modules
drwxrwxr-x   2 elasticsearch elasticsearch    4096 4月  29 15:12 config -> 配置檔案目錄
           

修改配置檔案

${KIBANA_HOME}/config/kibana.yml

  1. 添加 Elasticsearch 通路位址:

    elasticsearch.hosts: ["http://localhost:9200"]

服務啟動

  1. 通過指令

    ./bin/kibana

    啟動
  2. kibana 不像 ES 有直接的背景運作參數,隻能通過

    nohup

    配合

    &

    的方式背景運作
  3. 完整指令:

    nohup ./bin/kibana > kibana.log 2>&1 &

  4. 出現類似以下指令則代表啟動完成
{"type":"log","@timestamp":"2021-04-29T07:21:08Z","tags":["info","plugins-service"],"pid":13089,"message":"Plugin \"visTypeXy\" is disabled."}
...中間省略...在配套的ES 中建立了一些Kibana 自己用的索引...
{"type":"log","@timestamp":"2021-04-29T07:21:11Z","tags":["info","plugins","watcher"],"pid":13089,"message":"Your basic license does not support watcher. Please upgrade your license."}
{"type":"log","@timestamp":"2021-04-29T07:21:11Z","tags":["info","plugins","monitoring","monitoring","kibana-monitoring"],"pid":13089,"message":"Starting monitoring stats collection"}
{"type":"log","@timestamp":"2021-04-29T07:21:12Z","tags":["listening","info"],"pid":13089,"message":"Server running at http://localhost:5601"}
{"type":"log","@timestamp":"2021-04-29T07:21:13Z","tags":["info","http","server","Kibana"],"pid":13089,"message":"http server running at http://localhost:5601"} -> 開啟服務并可通過以下域名進行通路 http://localhost:5601
{"type":"log","@timestamp":"2021-04-29T07:21:15Z","tags":["warning","plugins","reporting"],"pid":13089,"message":"Enabling the Chromium sandbox provides an additional layer of protection."}
           
  1. 在浏覽器裡通過位址

    http://${node_ip}:5601

    進行通路

服務停機

  1. Kibana 的程序是一個 nodejs 服務,是以不能像 Elasticsearch 一樣通過

    ps -ef | grep kibana

    的方式擷取程序 id
  2. 隻能通過指令

    netstat

    ,通過查找監聽端口的方式來找到

    kibana

    對應的

    pid

    并進行

    kill

    操作
    1. netstat -anp | grep 5601 | awk '{ print $7 }' | cut -d '/' -f 1 | xargs kill -15

rpm 包安裝

KIBANA_DOWNLOAD_URL

  1. https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-x86_64.rpm

下載下傳并安裝:

  1. 切換到 root 賬戶(否則無法進行安裝)

    sudo -i

  2. mkdir -p /usr/local/kibana

  3. cd /usr/local/kibana

  4. wget -c ${KIBANA_DOWNLOAD_URL}

  5. rpm -ivh kibana-7.10.0-x86_64.rpm

安裝成功日志

  1. 日志會根據目前作業系統的語言而顯示不同的語言提示,本示例系統為中文
[root@esteam7002 kibana]# rpm -ivh kibana-7.10.0-x86_64.rpm
警告:kibana-7.10.0-x86_64.rpm: 頭V4 RSA/SHA512 Signature, 密鑰 ID d88e42b4: NOKEY
準備中...                          ################################# [100%]
正在更新/安裝...
   1:kibana-7.10.0-1                  ################################# [100%]
           

/etc/kibana/kibana.yml

  1. elasticsearch.hosts: ["http://localhost:9200"]

  1. 确認自己處于

    root

    使用者,否則指令需要加

    sudo

    字首
  2. systemctl start kibana

  3. 沒有報錯表明節點啟動完成
  4. http://${node_ip}:5601

  1. systemctl stop kibana

    停止服務
  2. 沒有報錯表明服務停機完成

Docker/docker-compose 安裝

下載下傳對應鏡像

  1. docker pull kibana:7.10.1

(可選)如果目标機器無法上網,可以嘗試通過其他機器下載下傳并導入鏡像

  1. 在主控端下載下傳鏡像

    docker pull kibana:7.10.1

  2. 把鏡像導出為檔案

    docker save -o kibana-7.10.1-image.tar docker.io/kibana:7.10.1

  3. 把導出的檔案拷貝到目标機器

    scp kibana-7.10.1-image.tar [email protected]:/tmp

  4. 登陸目标機器

    ssh [email protected]

  5. 導入目标鏡像

    docker load < kibana-7.10.1-image.tar

鏡像校驗

  1. docker images

[root@esteam7002 kibana]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
kibana                    7.10.1              3e014820ee3f        5 months ago        992 MB
           
  1. 不太建議直接指令行啟動,因為需要和 Elasticsearch 節點配置共通網絡之類的事情
  2. 這裡主要介紹通過 docker-compose 的方式進行管理
  3. vi docker-compose.yml

# 聲明docker-compose版本,Mac等環境可以使用3,但是在一些Linux環境中隻支援到2
   version: "2.2"

   # 聲明節點使用的網絡空間
   networks:
      bigdata:
         driver: bridge

   # 聲明 Kibana 節點
   services:
      kibana:
         # kibana 版本要和 ES 相比對,否則會報錯甚至無法正常啟動
         image: kibana:7.10.1
         container_name: kibana
         environment:
            # 如果 ES 節點和目前 kibana 節點在同一個 docker-compose 環境中
            # 可以直接寫對應的 ES container_name,否則需要填完整的 URL
            ELASTICSEARCH_HOSTS: http://es01:9200
         depends_on:
            - es01
         ports:
            - 5601:5601
         networks:
            - bigdata
           

MacOS 環境

MacOS 系統其實是一個類 Unix 系統,是以大部分的指令、環境屬性等都和 Unix 系統類似。

tar 包

安裝和上文提到的,在 Linux 系統中基于 tar 包安裝的過程大緻一樣。

  1. 需要注意的是,MacOS 作為一個較為特殊的作業系統,也會有一個專門針對 MacOS 系統編譯出來的安裝包
  2. 路徑上的主要差別為 Linux 系統的安裝包被标記了

    linux

    ,MacOS 的安裝包被标記了

    darwin

  3. https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-darwin-x86_64.tar.gz

brew

安裝

  1. Kibana 的 brew 安裝和 Elasticsearch 類似,需要一些非正常的操作順序
  2. brew tap elastic/tap

    将 Elastic 原廠的倉庫位址加入 homebrew 的配置
brew tap elastic/tap
Updating Homebrew...
==> Tapping elastic/tap
Cloning into '/usr/local/Homebrew/Library/Taps/elastic/homebrew-tap'...
remote: Enumerating objects: 890, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (104/104), done.
remote: Total 890 (delta 80), reused 57 (delta 26), pack-reused 759
Receiving objects: 100% (890/890), 206.46 KiB | 310.00 KiB/s, done.
Resolving deltas: 100% (666/666), done.
Tapped 17 formulae (51 files, 327.7KB).
           

brew install elastic/tap/kibana-full

進行安裝

➜ ~ brew install elastic/tap/kibana-full
==> Installing kibana-full from elastic/tap
==> Downloading https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-darwin-x86_64.tar.gz?tap=elastic/homebrew-t
######################################################################## 100.0%
==> Caveats
Config: /usr/local/etc/kibana/ -> 配置檔案路徑
If you wish to preserve your plugins upon upgrade, make a copy of
/usr/local/opt/kibana-full/plugins before upgrading, and copy it into the
new keg location after upgrading.

To have launchd start elastic/tap/kibana-full now and restart at login:
brew services start elastic/tap/kibana-full
Or, if you don't want/need a background service you can just run:
kibana
==> Summary
🍺  /usr/local/Cellar/kibana-full/7.12.1: 53,439 files, 719.9MB, built in 1 minute 26 seconds
           

注意,通過正常方式安裝

brew install elasticsearch

會安裝

7.10.2

,通過指令

brew info elasticsearch

也可以得到相應的資訊

  1. 還是建議通過原廠建議的

    brew info elasticsearch-full

    指令進行安裝和測試,目前通過這個指令會安裝 7.12 版本,和本文中其它的版本不太一緻。
  2. 這些路徑可能會因為系統的不同而有些許不同,也可能會有

    /Users/steven/working/sourcecode/homebrew/etc/kibana/

    等格式的情況

主要檔案路徑,也可以通過指令

brew info kibana-full

檢視

➜ ~ brew info kibana-full
elastic/tap/kibana-full: stable 7.12.1
Analytics and search dashboard for Elasticsearch
https://www.elastic.co/products/kibana
Conflicts with:
kibana
/usr/local/Cellar/kibana-full/7.12.1 (53,439 files, 719.9MB) *
Built from source on 2021-05-15 at 15:33:02
From: https://github.com/elastic/homebrew-tap/blob/HEAD/Formula/kibana-full.rb
==> Caveats
Config: /usr/local/etc/kibana/
If you wish to preserve your plugins upon upgrade, make a copy of
/usr/local/opt/kibana-full/plugins before upgrading, and copy it into the
new keg location after upgrading.

To have launchd start elastic/tap/kibana-full now and restart at login:
brew services start elastic/tap/kibana-full
Or, if you don't want/need a background service you can just run:
kibana
           
  1. $KIBANA_HOME/config/kibana.yml

    (本例為:

    /usr/local/etc/kibana/config/kibana.yml

  2. 在裡面配置 Elasticsearch 的 url,預設為

    http://localhost:9200

    或者

    http://127.0.0.1:9200

  3. 前台啟動指令:

    ➜ ~ kibana

  4. 背景/作為系統服務啟動:

    brew services start elastic/tap/kibana-full

  5. http://${node_ip}:5601

Windows OS 環境

Windows 的作業系統相對自成體系,是以在 Windows 平台中的安裝主要為

.zip

包安裝

  1. 下載下傳位址:

    https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-windows-x86_64.zip

  2. 主要的安裝流程和

    tar包

    安裝類似,隻是需要運作的是

    $KIBANA_HOME\bin\kibana.bat

    檔案而非 Xnix 系統中的

    $KIBANA_HOME/bin/kibana

  3. Kibana 所需要的配置檔案為

    $KIBANA_HOME\config\kibana.yml

本節列舉了通過多種方式對 Kibana 節點進行最簡安裝、部署、停機等操作,希望讀者可以找到适合自己的方式進行操作。

安全設定開啟

Kibana 作為與 Elasticsearch 緊密相關的應用,在 Elasticsearch 開啟了安全性認證的時候也需要相應的開啟安全性認證。

  1. 在 Elasticsearch 叢集中開啟安全性設定
  2. 通過

    bin/elasticsearch-setup-passwords

    指令生成所需要賬戶的密碼
  3. $KIBANA_HOME/config/kibana.yml

    kibana

    賬号(7.x之後可能會是

    kibana_system

    賬号)對應的密碼配置進相關參數中
    1. elasticsearch.username: "kibana_system"

    2. elasticsearch.password: "password"

  4. 在配置好安全設定之後初次登陸時需要以管理者(

    elastic

    )賬号進行登陸,并進行後續的配置和操作

各環境的配置方式參考

  1. rpm 包安裝:

    /etc/kibana/kibana.yml

  2. tar 包安裝:

    $KIBANA_HOME/config/kibana.yml

  3. docker 安裝:
    1. -v

      參數将本地配置檔案映射到 docker 節點裡:

      docker run -v $KIBANA_CONFIG_PATH/kibana.yml:/usr/share/kibana/config/kibana.yml docker.io/kibana:7.10.1

    2. 修改

      docker-compose.yml

      檔案裡的

      environment

      配置
...
   environment:
      # 注意這幾行
      ELASTICSEARCH_HOSTS: http://es01:9200
      ELASTICSEARCH_USERNAME: kibana
      ELASTICSEARCH_PASSWORD: kibana-password
...
           

MacOS:

  1. tar 包安裝:同上
  2. brew 安裝:

    brew info kibana-full

    中的配置位址,本例為:

    /usr/local/etc/kibana/config/kibana.yml

Windows:

  1. .zip 包安裝:同上文中 tar包安裝

本節中主要針對 Elasticsearch 叢集開啟了安全認證時,Kibana 需要進行的相關配置進行了闡述。

常見的參數優化

kibana 的功能已經較為完整,不太需要進行參數上的調整和優化,本節隻探讨開啟中文顯示的方式。

  1. 同上節中的方式修改對應的配置檔案
  2. 将參數

    i18n.locale

    設定成

    zh-CN

    • docker-compose.yml

      中對應的參數為

      I18N_LOCALE

常見問題及解決方案

本節将針對 Kibana 節點安裝部署過程中經常遇到的一些問題進行分析,并提供一些簡單的解決方案以供參考。

  1. Kibana should not be run as root. Use --allow-root to continue.

    1. Kibana 和 ES 一樣,不能直接通過 root 賬号啟動
    2. 像提示中一樣,可以通過添加參數

      --allow-root

      來啟動
    3. ./bin/kibana --allow-root

  2. FATAL Error: Port 5601 is already in use. Another instance of Kibana may be running!

    1. 5601 端口已被占用
    2. 修複方式:
      1. netstat -anp | grep 5601

        指令尋找綁定5601 端口的程序
[root@esteam7002 ~]# netstat -anp | grep 5601
tcp6       0      0 :::5601                 :::*                    LISTEN      3480/docker-proxy-c
           
1. 根據程序資訊來決定是否需要關閉已有程序
           
  1. 無法連接配接到 ES
log   [10:08:28.980] [error][elasticsearch][monitoring] Request error, retrying
GET http://localhost:9200/_xpack => connect ECONNREFUSED 127.0.0.1:9200
log   [10:08:28.993] [warning][elasticsearch][monitoring] Unable to revive connection: http://localhost:9200/
log   [10:08:28.994] [warning][elasticsearch][monitoring] No living connections
log   [10:08:28.995] [warning][licensing][plugins] License information could not be obtained from Elasticsearch due to Error: No Living connections error
log   [10:08:29.016] [warning][monitoring][monitoring][plugins] X-Pack Monitoring Cluster Alerts will not be available: No Living connections
log   [10:08:29.025] [error][data][elasticsearch] [ConnectionError]: connect ECONNREFUSED 127.0.0.1:9200
log   [10:08:29.059] [error][savedobjects-service] Unable to retrieve version information from Elasticsearch nodes.
log   [10:08:31.476] [error][data][elasticsearch] [ConnectionError]: connect ECONNREFUSED 127.0.0.1:9200
           
  1. Kibana 無法直接連接配接 Elasticsearch url,可能有以下原因
    1. 位址配置錯誤
    2. 目前節點和目标位址中間的網絡不通
    3. Elasticsearch 配置的監聽位址/端口有誤
    1. 檢查該位址/域名是否正确
    2. curl http://localhost:9200/

      指令測試一下目前節點是否能夠正常的連接配接到目标位址
    3. 調整并調試到正确的連接配接
  2. 認證失敗
log   [10:19:42.007] [error][data][elasticsearch] [security_exception]: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
log   [10:19:42.042] [error][savedobjects-service] Unable to retrieve version information from Elasticsearch nodes.
log   [10:19:42.047] [warning][licensing][plugins] License information could not be obtained from Elasticsearch due to [security_exception] missing authentication credentials for REST request [/_xpack], with { header={ WWW-Authenticate="Basic realm=\"security\" charset=\"UTF-8\"" } } :: {"path":"/_xpack","statusCode":401,"response":"{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"missing authentication credentials for REST request [/_xpack]\",\"header\":{\"WWW-Authenticate\":\"Basic realm=\\\"security\\\" charset=\\\"UTF-8\\\"\"}}],\"type\":\"security_exception\",\"reason\":\"missing authentication credentials for REST request [/_xpack]\",\"header\":{\"WWW-Authenticate\":\"Basic realm=\\\"security\\\" charset=\\\"UTF-8\\\"\"}},\"status\":401}","wwwAuthenticateDirective":"Basic realm=\"security\" charset=\"UTF-8\""} error
log   [10:19:42.050] [warning][monitoring][monitoring][plugins] X-Pack Monitoring Cluster Alerts will not be available: [security_exception] missing authentication credentials for REST request [/_xpack], with { header={ WWW-Authenticate="Basic realm=\"security\" charset=\"UTF-8\"" } }
log   [10:19:44.442] [error][data][elasticsearch] [security_exception]: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
log   [10:19:46.941] [error][data][elasticsearch] [security_exception]: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
           
  1. Kibana 未配置安全性設定,以至于無法正常連接配接 Elasticsearch 節點/叢集
  2. 當 Elasticsearch 節點/叢集開啟了安全性設定之後,所有的 restful 通路都需要添加認證設定,包括 kibana 的通路
  3. (如果沒有設定)在 Elasticsearch 叢集中選一個節點,運作

    bin/elasticsearch-setup-passwords

  4. $KIBANA_HOME/config/kibana.yml

    kibana

    kibana_system

    1. `elasticsearch.username: "kibana_system"`
    
        1. `elasticsearch.password: "password"`
               
  5. elastic

  6. Error: Unable to find a match: docker-compose

    ,找不到

    docker-compose

    對應安裝包
    1. 可能 yum 倉庫中沒有最新安裝包資訊或者精簡版系統中沒有對應的軟體資訊
      1. 把源檔案中應用市場的位址替換成中科大
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-Base.repo

           
  1. 先安裝

    epel-release

    (拓展應用市場)
  2. 再進行後續安裝
  3. Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    ,docker 程序沒啟動
    1. docker 安裝之後不會自動啟動,在未設定之前,伺服器重新開機之後 docker 多半也不會自動重新開機
      1. 啟動docker 程序

        systemctl start docker

      2. 設定docker 随系統啟動

        systemctl enable docker

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

    ,通路 docker 倉庫失敗
  5. 在某些節點中可能無法直接通路外網進行 docker 鏡像的下載下傳
  6. 1. 開啟外網通路
    
    1. (或者)在其他能夠通路外網的節點中下載下傳對應鏡像 `docker pull kibana:7.10.1`
    
    1. 把鏡像導出為檔案 `docker save -o kibana-7.10.1-image.tar docker.io/kibana:7.10.1`
    
    1. 把導出的檔案拷貝到目标機器 `scp kibana-7.10.1-image.tar [email protected]:/tmp`
    
    1. 登陸目标機器 `ssh [email protected]`
    
    1. 導入目标鏡像 `docker load < kibana-7.10.1-image.tar`
               
  7. Error response from daemon: manifest for kibana:7.9.11 not found: manifest unknown: manifest unknown

    ,找不到目标鏡像
    1. 可能在 docker 倉庫中找不到指定版本的鏡像
    2. 登陸鏡像倉庫搜尋合适版本(

      http://dockerhub.com/

    3. (或者)通過指令搜尋合适的鏡像

      docker search kibana

本節對 Kibana 部署和啟動過程中常見的問題及參考解決方案進行了簡要描述。

繼續閱讀