本節主要講解kibana部署,
環境準備
Kibana 是一個基於 Nodejs 構建出來的前端專案,它本身不包含資料儲存功能, 所以需要配合一個Elasticsearch 節點/叢集一起進行使用。本節將從系統環境的選擇,必須的基礎應用的安裝等方面進行闡述。
環境選擇策略
- 作業系統
由於 Kibana 不能獨立存在,需要繫結一個 Elasticsearch 節點/叢集,所以本文主要會以一個 CentOS 7 系統來承載它配套的 Elasticsearch 節點。我們也將介紹其它常用作業系統的安裝。
Kibana 可以支援的系統和 Elasticsearch 類似,可以大致認為支援 Elasticsearch的系統都可以承載 Kibana。
記憶體、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的連線地址:
然後重啟服務:
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"
}
安全設定開啟
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
- 根據程式資訊來決定是否需要關閉已有程式
無法連線到 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