36.5.4. Kibana
要从 OpenShift Container Platform web 控制台访问 Kibana 控制台,请使用 Kibana 控制台(kibana-hostname
参数)在 master webconsole-config configmap 文件中添加 loggingPublicURL
参数。该值必须是 HTTPS URL:
... clusterInfo: ... loggingPublicURL: "https://kibana.example.com" ...
在 OpenShift Container Platform Web 控制台中设置 loggingPublicURL
参数会在 Browse
当有效的登录 Cookie 过期时,您需要登录到 Kibana 控制台,例如:您需要登录:
- 首次使用
- 注销后
您可以像冗余方式扩展 Kibana 部署:
$ oc scale dc/logging-kibana --replicas=2
为确保扩展在日志记录 playbook 的多个执行之间保留,请确保更新清单文件中的 openshift_logging_kibana_replica_count
。
您可以通过访问 openshift_logging_kibana_hostname
变量指定的站点来查看用户界面。
有关 Kibana 的更多信息,请参阅 Kibana 文档。
Kibana Visualize
通过 Kibana Visualize,您可以创建用于监控容器和 pod 日志的视觉化和仪表板,管理员用户(cluster-admin
或 cluster-reader
)可以按部署、命名空间、Pod 和容器来查看日志。
Kibana Visualize 存在于 Elasticsearch 和 ES-OPS pod 中,且必须在这些 pod 中运行。要加载仪表板和其他 Kibana UI 对象,您必须首先以您要添加仪表板的用户身份登录到 Kibana,然后注销。这将创建下一步所依赖的每个用户所需的配置。然后运行:
$ oc exec <$espod> -- es_load_kibana_ui_objects <user-name>
其中 $espod
是 Elasticsearch Pod 之一的名称。
在 Kibana Visualize 中添加自定义字段
如果您的 OpenShift Container Platform 集群以 JSON 格式生成日志,其中包含 Elasticsearch .operations.*
或 项目.*
索引中定义的自定义字段,则无法使用这些字段创建视觉化,因为自定义字段在 Kibana 中不可用。
但是,您可以将自定义字段添加到 Elasticsearch 索引中,该索引允许您将字段添加到 Kibana 索引模式中,以便在 Kibana Visualize 中使用。
自定义字段仅应用于模板更新后创建的索引。
将自定义字段添加到 Kibana Visualize 中:
在 Elasticsearch 索引模板中添加自定义字段:
-
确定要添加哪些 Elasticsearch 索引,可以是
.operations.*
或project.*
索引。如果有具有自定义字段的特定项目,您可以将字段添加到项目的特定索引中,例如:project.this-project-has-time-fields.*
。 为自定义字段创建一个 JSON 文件,如下所示:
例如:
{ "order": 20, "mappings": { "_default_": { "properties": { "mytimefield1": { 1 "doc_values": true, "format": "yyyy-MM-dd HH:mm:ss,SSSZ||yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ||yyyy-MM-dd'T'HH:mm:ssZ||dateOptionalTime", "index": "not_analyzed", "type": "date" }, "mytimefield2": { "doc_values": true, "format": "yyyy-MM-dd HH:mm:ss,SSSZ||yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ||yyyy-MM-dd'T'HH:mm:ssZ||dateOptionalTime", "index": "not_analyzed", "type": "date" } } } }, "template": "project.<project-name>.*" 2 }
进入
openshift-logging
项目:$ oc project openshift-logging
获取一个 Elasticsearch Pod 的名称:
$ oc get -n logging pods -l component=es NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE logging-es-data-master-5av030lk-1-2x494 2/2 Running 0 38m 154.128.0.80 ip-153-12-8-6.wef.internal <none>
将 JSON 文件加载到 Elasticsearch pod 中:
$ cat <json-file-name> | \ 1 oc exec -n logging -i -c elasticsearch <es-pod-name> -- \ 2 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/_template/<json-file-name> -XPUT -d@- | \ 3 python -mjson.tool
{ "acknowledged": true }
如果您有单独的 OPS 集群,请获取其中一个 es-ops Elasticsearch pod 的名称:
$ oc get -n logging pods -l component=es-ops NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE logging-es-ops-data-master-o7nhcbo4-5-b7stm 2/2 Running 0 38m 154.128.0.80 ip-153-12-8-6.wef.internal <none>
将 JSON 文件加载到 es-ops Elasticsearch pod 中:
$ cat <json-file-name> | \ 1 oc exec -n logging -i -c elasticsearch <esops-pod-name> -- \ 2 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/_template/<json-file-name> -XPUT -d@- | \ 3 python -mjson.tool
输出结果类似如下:
{ "acknowledged": true }
验证索引是否已更新:
oc exec -n logging -i -c elasticsearch <es-pod-name> -- \ 1 curl -s -k --cert /etc/elasticsearch/secret/admin-cert \ --key /etc/elasticsearch/secret/admin-key \ https://localhost:9200/project.*/_search?sort=<custom-field>:desc | \ 2 python -mjson.tool
命令输出自定义字段的索引记录,按降序排列。
注意设置不适用于现有的索引。如果要将设置应用到现有索引中,请执行 re-index。
-
确定要添加哪些 Elasticsearch 索引,可以是
将自定义字段添加到 Kibana:
从 Elasticsearch 容器获取现有的索引模式文件:
$ mkdir index_patterns $ cd index_patterns $ oc project openshift-logging $ for espod in $( oc get pods -l component=es -o jsonpath='{.items[*].metadata.name}' ) ; do > for ff in $( oc exec -c elasticsearch <es-pod-name> -- ls /usr/share/elasticsearch/index_patterns ) ; do > oc exec -c elasticsearch <es-pod-name> -- cat /usr/share/elasticsearch/index_patterns/$ff > $ff > done > break > done
索引模式文件下载到 /usr/share/elasticsearch/index_patterns 目录中。
例如:
index_patterns $ ls com.redhat.viaq-openshift.index-pattern.json
编辑对应的索引模式文件,将每个自定义字段的定义添加到
字段
值中:例如:
{\"count\": 0, \"name\": \"mytimefield2\", \"searchable\": true, \"aggregatable\": true, \"readFromDocValues\": true, \"type\": \"date\", \"scripted\": false},
该定义必须包含
\"searchable\": true,
和\"aggregatable\": true,
才能进行视觉化使用。数据类型必须与上方添加的 Elasticsearch 字段定义对应。例如,如果您在 Elasticsearch 中添加了一个myfield
字段,它的类型为number
,则无法将myfield
添加到 Kibana 中作为字符串
类型。在索引模式文件中,将 Kibana 索引模式的名称添加到索引模式文件中:
例如,使用 operations.\* 索引模式:
"title": "*operations.*"
要使用 project.MYNAMESPACE.\* 索引模式:
"title": "project.MYNAMESPACE.*"
识别用户名并获取用户名的 hash 值。索引模式使用用户名的 hash 来存储。按顺序运行以下两个命令:
$ get_hash() { > printf "%s" "$1" | sha1sum | awk '{print $1}' > }
$ get_hash admin d0aeb5660fc2140aec35850c4da997
将索引模式文件应用到 Elasticsearch:
cat com.redhat.viaq-openshift.index-pattern.json | \ 1 oc exec -i -c elasticsearch <espod-name> -- es_util \ --query=".kibana.<user-hash>/index-pattern/<index>" -XPUT --data-binary @- | \ 2 python -mjson.tool
例如:
cat index-pattern.json | \ oc exec -i -c elasticsearch mypod-23-gb9pl -- es_util \ --query=".kibana.d0aeb5660fc2140aec35850c4da997/index-pattern/project.MYNAMESPACE.*" -XPUT --data-binary @- | \ python -mjson.tool
输出结果类似如下:
{ "_id": ".operations.*", "_index": ".kibana.d0aeb5660fc2140aec35850c4da997", "_shards": { "failed": 0, "successful": 2, "total": 2 }, "_type": "index-pattern", "_version": 1, "created": true, "result": "created" }
-
退出并重启自定义字段的 Kibana 控制台,使其显示在 Available Fields 列表中,并在 Management
Index Patterns 页面上的字段列表中显示。