Kibana環境部署

startshineye發表於2022-02-05

本節主要講解kibana部署,

環境準備

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

環境選擇策略

  1. 作業系統

​ 由於 Kibana 不能獨立存在,需要繫結一個 Elasticsearch 節點/叢集,所以本文主要會以一個 CentOS 7 系統來承載它配套的 Elasticsearch 節點。我們也將介紹其它常用作業系統的安裝。

Kibana 可以支援的系統和 Elasticsearch 類似,可以大致認為支援 Elasticsearch的系統都可以承載 Kibana。

  1. 記憶體、CPU

    ​ Kibana 是一個前端系統,繫結的 Elasticsearch 可以認為是它用來存取資料用的資料庫,所以不需要特別高的配置。

    本文將以一個最小能夠順暢執行 Elasticsearch 節點的配置進行描述(1C2G)

實際系統配置

​ Kibana 的系統安裝、配置和上一節 Elasticsearch 的安裝一致,修改源並安裝必要工具:

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

​ 開啟 docker 服務:

systemctl start docker
systemctl enable docker

下載、安裝及啟動

tar 包安裝

國內映象下載連結(後面以 KIBANA_DOWNLOAD_URL 指代):

https://repo.huaweicloud.com/kibana/7.13.4/kibana-7.13.4-linux-x86_64.tar.gz

下載並解壓:

  • 建立檔案:mkdir -p /usr/local/kibana
  • 切換目錄:cd /usr/local/kibana
  • 下載檔案:wget -c https://repo.huaweicloud.com/...
  • 解壓:tar vxf kibana-7.13.4-linux-x86_64.tar.gz

    drwxr-xr-x   3 root root    4096 7月  15 2021 x-pack
    drwxr-xr-x  10 root root    4096 7月  15 2021 src
    -rw-r--r--   1 root root    3968 7月  15 2021 README.txt--->專案說明文件
    drwxr-xr-x   2 root root    4096 7月  15 2021 plugins-->外掛資料夾, 目前為空,自定義外掛會放置在這裡
    -rw-r--r--   1 root root     740 7月  15 2021 package.json-->專案打包檔案
    -rw-r--r--   1 root root 1476895 7月  15 2021 NOTICE.txt-->一些協議 的說明以及違反後果的警告
    drwxr-xr-x 827 root root   32768 7月  15 2021 node_modules
    -rw-r--r--   1 root root    3860 7月  15 2021 LICENSE.txt-->協議
    drwxr-xr-x   2 root root    4096 7月  15 2021 data-->Kibana 和它的 外掛寫本地檔案的資料夾
    drwxr-xr-x   2 root root    4096 7月  15 2021 config-->配置檔案目錄
    drwxr-xr-x   6 root root    4096 7月  15 2021 node
    drwxr-xr-x   2 root root    4096 7月  15 2021 bin--->Kibana 內建命令列工具

​ 修改配置檔案 ${KIBANA_HOME}/config/kibana.yml

  • 新增 Elasticsearch 訪問地址:elasticsearch.hosts: ["http://localhost:9200"]
  • 服務啟動:

    通過命令./bin/kibana 啟動

    kibana 不像 ES 有直接的後臺執行引數,只能通過 nohup 配合 & 的方式後臺執行

    完整命令:

    nohup ./bin/kibana > kibana.log 2>&1 &
  • 在瀏覽器裡通過地址 http://${node_ip}:5601 進行訪問

服務暫停

  • Kibana 的程式是一個 nodejs 服務,所以不能像 Elasticsearch 一樣通過 ps -ef | grep kibana 的方式獲取程式 id
  • 只能通過命令 netstat,通過查詢監聽埠的方式來找到 kibana 對應的 pid 並進行kill 操作
  • 完整命令:

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

Docker/docker-compose 安裝

下載對應映象:

docker pull kibana:7.13.4

(可選)如果目標機器無法上網,可以嘗試通過其他機器下載並匯入映象:

  • 在宿主機下載映象 docker pull kibana:7.13.4
  • 把映象匯出為檔案 docker save -o kibana-7.13.4-image.tar docker.io/kibana:7.13.4
  • 把匯出的檔案拷貝到目標機器 scp kibana-7.13.4-image.tar root@192.168.10.221: /tmp
  • 登陸目標機器 ssh root@192.168.10.221
  • 匯入目標映象 docker load < kibana-7.13.4-image.tar

映象驗證:

 docker images

服務啟動:

不太建議直接命令列啟動,因為需要和 Elasticsearch 節點配置共通網路之類的事情。

這裡主要介紹通過 docker-compose 的方式進行管理。

修改配置檔案 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.13.4 
     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

或者我們單獨啟動如下:

docker run -d --name kibana  -p 0.0.0.0:5601:5601 --restart=always kibana:7.13.4

然後進入容器修改其es的連線地址:

25.png

然後重啟服務:

docker restart kibana 

服務訪問

​ 在瀏覽器裡通過地址 http://192.168.2.11:5601 進行訪問,剛開始可能訪問比較慢,需要等待一會,然後才會出現下面的效果。

​ 然後進入kibana控制檯:執行:

GET /

得到下面的結果:

{
  "name" : "node-11",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "q2_ZSSScSYy08nV9psoa9w",
  "version" : {
    "number" : "7.13.4",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "c5f60e894ca0c61cdbae4f5a686d9f08bcefc942",
    "build_date" : "2021-07-14T18:33:36.673943207Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

26.png

安全設定開啟

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

  • 在 Elasticsearch 叢集中開啟安全性設定
  • 通過 bin/elasticsearch-setup-passwords 命令生成所需要賬戶的密碼
  • 修改配置檔案 $KIBANA_HOME/config/kibana.yml 將 kibana 賬號(7.x 之後可能會是 kibana_system 賬號)對應的密碼配置進相關引數中
  • elasticsearch.username: "kibana_system"
  • elasticsearch.password: "password"
  • 在配置好安全設定之後初次登陸時需要以管理員(elastic)賬號進行登陸,並進行後續的配置和操作

各環境的配置方式參考

  • rpm 包安裝:/etc/kibana/kibana.yml
  • tar 包安裝:$KIBANA_HOME/config/kibana.yml
  • docker 安裝:

    • 通過 -v 引數將本地配置檔案對映到 docker 節點裡:docker run -v $KIBANA_CONFIG_PATH/kibana.yml:/usr/share/kibana/config/kibana.yml docker.io/kibana:7.134
    • 修改 docker-compose.yml 檔案裡的 environment 配置

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

MacOS:

  • tar 包安裝:同上
  • brew 安裝:brew info kibana-full 中的配置地址,本例為:/usr/local/etc/kibana/config/kibana.yml

Windows:

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

常見引數優化

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

  • 同上節中的方式修改對應的配置檔案
  • 將引數 i18n.locale 設定成 zh-CN

    • 在 docker-compose.yml 中對應的引數為 I18N_LOCALE

常見問題及解決方案

kibana節點安裝部署過程中經常遇到的一些問題進行分析,並提供一些簡單的解決方案。

Kibana should not be run as root. Use --allow-root to continue.
  • Kibana 和 ES 一樣,不能直接通過 root 賬號啟動
  • 像提示中一樣,可以通過新增引數 --allow-root 來啟動
  • 完整命令:./bin/kibana --allow-root
FATAL Error: Port 5601 is already in use. Another instance of Kibana may be running!
  • 5601 埠已被佔用
  • 修復方式:

    通過 netstat -anp | grep 5601 命令尋找繫結 5601 埠的程式:

    netstat -anp | grep 5601 tcp6 0 0 :::5601 :::* LISTEN 3480/d ocker-proxy-c
    1. 根據程式資訊來決定是否需要關閉已有程式
無法連線到 ES
log [10:08:28.980] [error][elasticsearch][monitoring] Request error, retrying GET http://localhost:9200/_xpack => connect ECONNREFUSED 127.0.0.1:9200log [10:08:2 8.993] [warning][elasticsearch][monitoring] Unable to revive connection: http://localhost:9200/ log [10:08:28.994] [warning][elasticsearch][monitoring] No living connectionslog [10:08:28. 995] [warning][licensing][plugins] License information could not be obtained from Elasticsear ch due to Error: No Living connections errorlog [10:08:29.016] [warning][monitoring][monit oring][plugins] X-Pack Monitoring Cluster Alerts will not be available: No Living connectionsl og [10:08:29.025] [error][data][elasticsearch] [ConnectionError]: connect ECONNREFUSED 12 7.0.0.1:9200log [10:08:29.059] [error][savedobjects-service] Unable to retrieve version inform ation from Elasticsearch nodes.log [10:08:31.476] [error][data][elasticsearch] [ConnectionErr or]: connect ECONNREFUSED 127.0.0.1:9200
  • Kibana 無法直接連線 Elasticsearch url,可能有以下原因:

    • 地址配置錯誤
    • 當前節點和目標地址中間的網路不通
    • Elasticsearch 配置的監聽地址/埠有誤
  • 修復方式:

    • 檢查該地址/域名是否正確。
    • 通過 curl http://localhost:9200/ 命令測試一下當前節點是否能夠正常的連線到目標地址。
    • 調整並除錯到正確的連線。
認證失敗
log [10:19:42.007] [error][data][elasticsearch] [security_exception]: missing authenticatio n credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_a ddress%2Cnodes.*.ip]log [10:19:42.042] [error][savedobjects-service] Unable to retrieve versi on information from Elasticsearch nodes.log [10:19:42.047] [warning][licensing][plugins] Lice nse information could not be obtained from Elasticsearch due to [security_exception] missi ng authentication credentials for REST request [/_xpack], with { header={ WWW-Authenticate ="Basic realm=\"security\" charset=\"UTF-8\"" } } :: {"path":"/_xpack","statusCode":401,"respon se":"{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"missing authenticatio n credentials for REST request [/_xpack]\",\"header\":{\"WWW-Authenticate\":\"Basic realm=\\\ "security\\\" charset=\\\"UTF-8\\\"\"}}],\"type\":\"security_exception\",\"reason\":\"missing authe ntication credentials for REST request [/_xpack]\",\"header\":{\"WWW-Authenticate\":\"Basic re alm=\\\"security\\\" charset=\\\"UTF-8\\\"\"}},\"status\":401}","wwwAuthenticateDirective":"Basic realm=\"security\" charset=\"UTF-8\""} errorlog [10:19:42.050] [warning][monitoring][monitor ing][plugins] X-Pack Monitoring Cluster Alerts will not be available: [security_exception]3.4.1.2 Kibana(本地及 docker) < 162 missing authentication credentials for REST request [/_xpack], with { header={ WWW-Authent icate="Basic realm=\"security\" charset=\"UTF-8\"" } }log [10:19:44.442] [error][data][elasticse arch] [security_exception]: missing authentication credentials for REST request [/_nodes?filter _path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]log [10:19:46.941] [erro r][data][elasticsearch] [security_exception]: missing authentication credentials for REST reque st [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
  • Kibana 未配置安全性設定,以至於無法正常連線 Elasticsearch 節點/叢集。
  • 當 Elasticsearch 節點/叢集開啟了安全性設定之後,所有的 restful 訪問都需要新增認證設定,包括 kibana 的訪問。
  • 修復方式:

    • (如果沒有設定)在 Elasticsearch 叢集中選一個節點,執行 bin/elasticsearch-setup-passwords 命令生成所需要賬戶的密碼
    • 修改配置檔案 $KIBANA_HOME/config/kibana.yml 將 kibana 賬號(7.x 之後可能會是 kibana_system 賬號)對應的密碼配置進相關引數中

      `elasticsearch.username: "kibana_system"`
      `elasticsearch.password: "password"`
  • 在配置好安全設定之後初次登陸時需要以管理員(elastic)賬號進行登陸,並進行後續的配置和操作
Error: Unable to find a match: docker-compose,找不到 docker-compose 對應安裝包
  • 可能 yum 倉庫中沒有最新安裝包資訊或者精簡版系統中沒有對應的軟體資訊
  • 修復方式:

    • 把原始檔中應用市場的地址替換成中科大:

      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

      先安裝 epel-release (擴充應用市場)

      再進行後續安裝

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Isthe docker daemon running?,docker 程式沒啟動
  • docker 安裝之後不會自動啟動,在未設定之前,伺服器重啟之後 docker 多半也不會自動重啟。
  • 修復方式:

    • 啟動 docker 程式 systemctl start docker。
    • 設定 docker 隨系統啟動 systemctl enable docker。
Get https://registry-1.docker.io/... net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers

訪問docker 倉庫失敗,在某些節點中可能無法直接訪問外網進行 docker 映象的下載

修復方式:

1. 開啟外網訪問 
2. (或者)在其他能夠訪問外網的節點中下載對應映象 `docker pull kibana:7.10.1` 
3. 把映象匯出為檔案 `docker save -o kibana-7.10.1-image.tar docker.io/kibana:7.10.1` 
4. 把匯出的檔案拷貝到目標機器 `scp kibana-7.10.1-image.tar root@192.168.10.221:/tmp` 
5. 登陸目標機器 `ssh root@192.168.10.221` 1. 匯入目標映象
Error response from daemon: manifest for kibana:7.9.11 not found: manifest unknown: manifest unknown
  • 找不到目標映象。可能在 docker 倉庫中找不到指定版本的映象
  • 登陸映象倉庫搜尋合適版本(http://dockerhub.com/
  • (或者)通過命令搜尋合適的映象 docker search kibana

相關文章