Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 参数会在 BrowsePods<pod_name>Logs 选项卡中创建一个 View Archive 按钮。这会链接到 Kibana 控制台。

注意

当有效的登录 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-admincluster-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 中:

  1. 在 Elasticsearch 索引模板中添加自定义字段:

    1. 确定要添加哪些 Elasticsearch 索引,可以是 .operations.*project.* 索引。如果有具有自定义字段的特定项目,您可以将字段添加到项目的特定索引中,例如: project.this-project-has-time-fields.*
    2. 为自定义字段创建一个 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
      }
      1
      添加自定义字段和参数。
      2
      指定 .operations.*project.* 索引。
    3. 进入 openshift-logging 项目:

      $ oc project openshift-logging
    4. 获取一个 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>
    5. 将 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
      1 3
      您创建的 JSON 文件的名称。
      2
      Elasticsearch Pod 的名称。
      {
          "acknowledged": true
      }
    6. 如果您有单独的 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>
    7. 将 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
      1 3
      您创建的 JSON 文件的名称。
      2
      OPS 集群 Elasticsearch pod 的名称。

      输出结果类似如下:

      {
          "acknowledged": true
      }
    8. 验证索引是否已更新:

      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
      1
      Elasticsearch 或 OPS 集群 Elasticsearch pod 的名称。
      2
      您添加的自定义字段的名称。

      命令输出自定义字段的索引记录,按降序排列。

      注意

      设置不适用于现有的索引。如果要将设置应用到现有索引中,请执行 re-index。

  2. 将自定义字段添加到 Kibana:

    1. 从 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
    2. 编辑对应的索引模式文件,将每个自定义字段的定义添加到字段值中:

      例如:

      {\"count\": 0, \"name\": \"mytimefield2\", \"searchable\": true, \"aggregatable\": true, \"readFromDocValues\": true, \"type\": \"date\", \"scripted\": false},

      该定义必须包含 \"searchable\": true,\"aggregatable\": true, 才能进行视觉化使用。数据类型必须与上方添加的 Elasticsearch 字段定义对应。例如,如果您在 Elasticsearch 中添加了一个 myfield 字段,它的类型为 number,则无法将 myfield 添加到 Kibana 中作为字符串类型。

    3. 在索引模式文件中,将 Kibana 索引模式的名称添加到索引模式文件中:

      例如,使用 operations.\* 索引模式:

      "title": "*operations.*"

      要使用 project.MYNAMESPACE.\* 索引模式:

      "title": "project.MYNAMESPACE.*"
    4. 识别用户名并获取用户名的 hash 值。索引模式使用用户名的 hash 来存储。按顺序运行以下两个命令:

      $ get_hash() {
      >     printf "%s" "$1" | sha1sum | awk '{print $1}'
      > }
      $ get_hash admin
      
      d0aeb5660fc2140aec35850c4da997
    5. 将索引模式文件应用到 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
      1
      索引模式文件的名称。
      2
      用户散列和索引,可以是 .operations.*project.*

      例如:

      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"
      }
    6. 退出并重启自定义字段的 Kibana 控制台,使其显示在 Available Fields 列表中,并在 ManagementIndex Patterns 页面上的字段列表中显示。