生產環境部署
Kibana4 是是一個完整的 web 應用。使用時,你需要做的只是打開瀏覽器,然后輸入你運行 Kibana 的機器地址然后加上端口號。比如說:localhost:5601
或者 http://YOURDOMAIN.com:5601
。
但是當你准備在生產環境使用 Kibana4 的時候,比起在本機運行,就需要多考慮一些問題:
- 在哪運行 kibana
- 是否需要加密 Kibana 出入的流量
- 是否需要控制訪問數據的權限
Nginx 代理配置
因為 Kibana4 不再是 Kibana3 那種純靜態文件的單頁應用,所以其服務器端是需要消耗計算資源的。因此,如果用戶較多,Kibana4 確實有可能需要進行多點部署,這時候,就需要用 Nginx 做一層代理了。
和 Kibana3 相比,Kibana4 的 Nginx 代理配置倒是簡單許多,因為所有流量都是統一配置的。下面是一段包含入口流量加密、簡單權限控制的 Kibana4 代理配置:
upstream kibana4 { server 127.0.0.1:5601 fail_timeout=0; } server { listen *:80; server_name kibana_server; access_log /var/log/nginx/kibana.srv-log-dev.log; error_log /var/log/nginx/kibana.srv-log-dev.error.log; ssl on; ssl_certificate /etc/nginx/ssl/all.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { root /var/www/kibana; index index.html index.htm; } location ~ ^/kibana4/.* { proxy_pass http://kibana4; rewrite ^/kibana4/(.*) /$1 break; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd; } }
如果用戶夠多,當然你可以單獨跑一個 kibana4 集群,然后在 upstream
配置段中添加多個代理地址做負載均衡。
配置 Kibana 和 shield 一起工作
Nginx 只能加密和管理瀏覽器到服務器端的請求,而 Kibana4 到 ELasticsearch 集群的請求,就需要由 Elasticsearch 方面來完成了。如果你在用 Shield 做 Elasticsearch 用戶認證,你需要給 Kibana 提供用戶憑證,這樣它才能訪問 .kibana
索引。Kibana 用戶需要由權限訪問 .kibana
索引里以下操作:
'.kibana': - indices:admin/create - indices:admin/exists - indices:admin/mapping/put - indices:admin/mappings/fields/get - indices:admin/refresh - indices:admin/validate/query - indices:data/read/get - indices:data/read/mget - indices:data/read/search - indices:data/write/delete - indices:data/write/index - indices:data/write/update - indices:admin/create
更多配置 Shield 的內容,請閱讀官網的 Shield with Kibana 4。
要配置 Kibana 的憑證,設置 kibana.yml
里的 kibana_elasticsearch_username
和kibana_elasticsearch_password
選項即可:
# If your Elasticsearch is protected with basic auth: kibana_elasticsearch_username: kibana4 kibana_elasticsearch_password: kibana4
開啟 ssl
Kibana 同時支持對客戶端請求以及 Kibana 服務器發往 Elasticsearch 的請求做 SSL 加密。
要加密瀏覽器(或者在 Nginx 代理情況下,Nginx 服務器)到 Kibana 服務器之間的通信,配置 kibana.yml
里的 ssl_key_file
和 ssl_cert_file
參數:
# SSL for outgoing requests from the Kibana Server (PEM formatted) ssl_key_file: /path/to/your/server.key ssl_cert_file: /path/to/your/server.crt
如果你在用 Shield 或者其他提供 HTTPS 的代理服務器保護 Elasticsearch,你可以配置 Kibana 通過 HTTPS 方式訪問 Elasticsearch,這樣 Kibana 服務器和 Elasticsearch 之間的通信也是加密的。
要做到這點,你需要在 kibana.yml
里配置 Elasticsearch 的 URL 時指明是 HTTPS 協議:
elasticsearch: "https://<your_elasticsearch_host>.com:9200"
如果你給 Elasticsearch 用的是自己簽名的證書,請在 kibana.yml
里設定 ca
參數指明 PEM 文件位置,這也意味着開啟了 verify_ssl
參數:
# If you need to provide a CA certificate for your Elasticsarech instance, put # the path of the pem file here. ca: /path/to/your/ca/cacert.pem
控制訪問權限
你可以用 Elasticsearch Shield 來控制用戶通過 Kibana 可以訪問到的 Elasticsearch 數據。Shield 提供了索引級別的訪問控制。如果一個用戶沒被許可運行這個請求,那么它在 Kibana 可視化界面上只能看到一個空白。
要配置 Kibana 使用 Shield,你要位 Kibana 創建一個或者多個 Shield 角色(role),以 kibana4
作為開頭的默認角色。更詳細的做法,請閱讀 Using Shield with Kibana 4。