創作人:陳晨
審稿人:劉帥
環境準備
Kibana 是一個基于 Nodejs 建構出來的前端項目,它本身不包含資料存儲功能,是以需要配合一個 Elasticsearch 節點/叢集一起進行使用。本節将從系統環境的選擇,必須的基礎應用的安裝等方面進行闡述。
環境選擇政策
- 作業系統
- 由于 Kibana 不能獨立存在,需要綁定一個Elasticsearch 節點/叢集,是以本文主要會以一個
系統來承載它配套的 Elasticsearch 節點。我們也将介紹其它常用作業系統的安裝。CentOS7
- Kibana 可以支援的系統和 Elasticsearch 類似,可以大緻認為支援 Elasticsearch 的系統都可以承載 Kibana。
- 由于 Kibana 不能獨立存在,需要綁定一個Elasticsearch 節點/叢集,是以本文主要會以一個
- 記憶體、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
-
小結
本節對 Kibana 節點部署所需環境對選擇政策、必備軟體等方面進行了闡述。
下載下傳、安裝及啟動
本節将對幾個主流的 Kibana 安裝部署的方式進行闡述,會對節點的安裝、部署、啟動、停機等流程進行較長的描述。
tar 包安裝
下載下傳連結(後面以
KIBANA_DOWNLOAD_URL
指代):
-
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz
下載下傳并解壓:
-
mkdir -p /usr/local/kibana
-
cd /usr/local/kibana
-
wget -c ${KIBANA_DOWNLOAD_URL}
-
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
- 添加 Elasticsearch 通路位址:
elasticsearch.hosts: ["http://localhost:9200"]
服務啟動
- 通過指令
啟動./bin/kibana
- kibana 不像 ES 有直接的背景運作參數,隻能通過
配合nohup
的方式背景運作&
- 完整指令:
nohup ./bin/kibana > kibana.log 2>&1 &
- 出現類似以下指令則代表啟動完成
{"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."}
- 在浏覽器裡通過位址
進行通路http://${node_ip}:5601
服務停機
- Kibana 的程序是一個 nodejs 服務,是以不能像 Elasticsearch 一樣通過
的方式擷取程序 idps -ef | grep kibana
- 隻能通過指令
,通過查找監聽端口的方式來找到netstat
對應的kibana
并進行pid
操作kill
-
netstat -anp | grep 5601 | awk '{ print $7 }' | cut -d '/' -f 1 | xargs kill -15
-
rpm 包安裝
KIBANA_DOWNLOAD_URL
-
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-x86_64.rpm
下載下傳并安裝:
- 切換到 root 賬戶(否則無法進行安裝)
sudo -i
-
mkdir -p /usr/local/kibana
-
cd /usr/local/kibana
-
wget -c ${KIBANA_DOWNLOAD_URL}
-
rpm -ivh kibana-7.10.0-x86_64.rpm
安裝成功日志
- 日志會根據目前作業系統的語言而顯示不同的語言提示,本示例系統為中文
[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
-
elasticsearch.hosts: ["http://localhost:9200"]
- 确認自己處于
使用者,否則指令需要加root
字首sudo
-
systemctl start kibana
- 沒有報錯表明節點啟動完成
-
http://${node_ip}:5601
-
停止服務systemctl stop kibana
- 沒有報錯表明服務停機完成
Docker/docker-compose 安裝
下載下傳對應鏡像
-
docker pull kibana:7.10.1
(可選)如果目标機器無法上網,可以嘗試通過其他機器下載下傳并導入鏡像
- 在主控端下載下傳鏡像
docker pull kibana:7.10.1
- 把鏡像導出為檔案
docker save -o kibana-7.10.1-image.tar docker.io/kibana:7.10.1
- 把導出的檔案拷貝到目标機器
scp kibana-7.10.1-image.tar [email protected]:/tmp
- 登陸目标機器
- 導入目标鏡像
docker load < kibana-7.10.1-image.tar
鏡像校驗
-
docker images
[root@esteam7002 kibana]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kibana 7.10.1 3e014820ee3f 5 months ago 992 MB
- 不太建議直接指令行啟動,因為需要和 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.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 包安裝的過程大緻一樣。
- 需要注意的是,MacOS 作為一個較為特殊的作業系統,也會有一個專門針對 MacOS 系統編譯出來的安裝包
- 路徑上的主要差別為 Linux 系統的安裝包被标記了
,MacOS 的安裝包被标記了linux
darwin
-
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-darwin-x86_64.tar.gz
brew
安裝
- Kibana 的 brew 安裝和 Elasticsearch 類似,需要一些非正常的操作順序
-
将 Elastic 原廠的倉庫位址加入 homebrew 的配置brew tap elastic/tap
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
也可以得到相應的資訊
- 還是建議通過原廠建議的
指令進行安裝和測試,目前通過這個指令會安裝 7.12 版本,和本文中其它的版本不太一緻。brew info elasticsearch-full
- 這些路徑可能會因為系統的不同而有些許不同,也可能會有
等格式的情況/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
-
(本例為:$KIBANA_HOME/config/kibana.yml
/usr/local/etc/kibana/config/kibana.yml
- 在裡面配置 Elasticsearch 的 url,預設為
或者http://localhost:9200
http://127.0.0.1:9200
- 前台啟動指令:
➜ ~ kibana
- 背景/作為系統服務啟動:
brew services start elastic/tap/kibana-full
-
http://${node_ip}:5601
Windows OS 環境
Windows 的作業系統相對自成體系,是以在 Windows 平台中的安裝主要為
.zip
包安裝
- 下載下傳位址:
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-windows-x86_64.zip
- 主要的安裝流程和
安裝類似,隻是需要運作的是tar包
檔案而非 Xnix 系統中的$KIBANA_HOME\bin\kibana.bat
$KIBANA_HOME/bin/kibana
- Kibana 所需要的配置檔案為
$KIBANA_HOME\config\kibana.yml
本節列舉了通過多種方式對 Kibana 節點進行最簡安裝、部署、停機等操作,希望讀者可以找到适合自己的方式進行操作。
安全設定開啟
Kibana 作為與 Elasticsearch 緊密相關的應用,在 Elasticsearch 開啟了安全性認證的時候也需要相應的開啟安全性認證。
- 在 Elasticsearch 叢集中開啟安全性設定
- 通過
指令生成所需要賬戶的密碼bin/elasticsearch-setup-passwords
-
将$KIBANA_HOME/config/kibana.yml
賬号(7.x之後可能會是kibana
賬号)對應的密碼配置進相關參數中kibana_system
-
elasticsearch.username: "kibana_system"
-
elasticsearch.password: "password"
-
- 在配置好安全設定之後初次登陸時需要以管理者(
)賬号進行登陸,并進行後續的配置和操作elastic
各環境的配置方式參考
- rpm 包安裝:
/etc/kibana/kibana.yml
- tar 包安裝:
$KIBANA_HOME/config/kibana.yml
- docker 安裝:
-
參數将本地配置檔案映射到 docker 節點裡:-v
docker run -v $KIBANA_CONFIG_PATH/kibana.yml:/usr/share/kibana/config/kibana.yml docker.io/kibana:7.10.1
- 修改
檔案裡的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包安裝
本節中主要針對 Elasticsearch 叢集開啟了安全認證時,Kibana 需要進行的相關配置進行了闡述。
常見的參數優化
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 端口已被占用
- 修複方式:
-
指令尋找綁定5601 端口的程序netstat -anp | grep 5601
-
[root@esteam7002 ~]# netstat -anp | grep 5601
tcp6 0 0 :::5601 :::* LISTEN 3480/docker-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: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
- Kibana 無法直接連接配接 Elasticsearch url,可能有以下原因
- 位址配置錯誤
- 目前節點和目标位址中間的網絡不通
- Elasticsearch 配置的監聽位址/端口有誤
-
- 檢查該位址/域名是否正确
-
指令測試一下目前節點是否能夠正常的連接配接到目标位址curl http://localhost:9200/
- 調整并調試到正确的連接配接
- 認證失敗
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]
- Kibana 未配置安全性設定,以至于無法正常連接配接 Elasticsearch 節點/叢集
- 當 Elasticsearch 節點/叢集開啟了安全性設定之後,所有的 restful 通路都需要添加認證設定,包括 kibana 的通路
- (如果沒有設定)在 Elasticsearch 叢集中選一個節點,運作
bin/elasticsearch-setup-passwords
-
$KIBANA_HOME/config/kibana.yml
kibana
kibana_system
1. `elasticsearch.username: "kibana_system"` 1. `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
- 再進行後續安裝
-
,docker 程序沒啟動Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- docker 安裝之後不會自動啟動,在未設定之前,伺服器重新開機之後 docker 多半也不會自動重新開機
-
- 啟動docker 程序
systemctl start docker
- 設定docker 随系統啟動
systemctl enable docker
- 啟動docker 程序
-
,通路 docker 倉庫失敗Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- 在某些節點中可能無法直接通路外網進行 docker 鏡像的下載下傳
-
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`
-
,找不到目标鏡像Error response from daemon: manifest for kibana:7.9.11 not found: manifest unknown: manifest unknown
- 可能在 docker 倉庫中找不到指定版本的鏡像
- 登陸鏡像倉庫搜尋合适版本(
http://dockerhub.com/
- (或者)通過指令搜尋合适的鏡像
docker search kibana
本節對 Kibana 部署和啟動過程中常見的問題及參考解決方案進行了簡要描述。