# Kibana

:一个基于 node.js 运行的 Web 服务器,提供了对 ES 的 Web 管理页面。

# 部署

  • 下载二进制版:

    wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz
    

    解压后运行:

    bin/kibana
    
  • 或者用 docker-compose 部署:

    version: '3'
    
    services:
      kibana:
        container_name: kibana
        image: kibana:7.10.0
        restart: unless-stopped
        ports:
          - 5601:5601
        volumes:
          - ./config:/usr/share/kibana/config
          - ./data:/usr/share/kibana/data
    
    • 容器内以非 root 用户运行服务,需要调整挂载目录的权限:
      mkdir -p data
      chown -R 1000 .
      

# 配置

Kibana 的配置文件位于 config/kibana.yml ,内容示例:

server.port: 5601           # Kibana 监听的端口
server.host: 0.0.0.0        # Kibana 监听的 IP
server.name: kibana         # 服务器显示的名称
server.publicBaseUrl: https://kibana.test.com   # kibana 最终供用户访问的地址

# 连接到 ES
elasticsearch.hosts: ['http://10.0.0.1:9200']   # 要连接的 ES 地址。可以连接到同一 ES 集群的多个节点,从而提高可用性
elasticsearch.ssl.verificationMode: none        # 不验证 ES 的 SSL 证书是否有效
# elasticsearch.username: kibana_system         # 让 Kibana 通过该账号访问 ES
# elasticsearch.password: ******
# kibana.index: '.kibana'               # 在 ES 中创建该索引,用于存储 Kibana 的数据
# elasticsearch.requestTimeout: 30000   # 每次向 ES 发送 HTTP 请求时,等待 HTTP 响应的超时时间。默认为 30

# 默认的日志格式不是 JSON ,因此需要主动配置
logging:
  appenders:
    json-layout:
      type: console
      layout:
        type: json
  root:
    appenders: [json-layout]
    level: info

# 关于 xpack 功能
xpack.encryptedSavedObjects.encryptionKey: ****** # 将一些敏感信息存储到 ES 时,采用的加密密钥,长度至少 32 个字符。如果未指定,则 kibana 每次重启时会生成一个随机密钥
xpack.reporting.encryptionKey: ******             # 生成报告时采用的加密密钥
xpack.security.encryptionKey: ******              # 用户会话采用的加密密钥
xpack.security.session.idleTimeout: 1d            # 用户访问 kibana 网站时,如果会话长期空闲,则过期。默认不会过期
# xpack.security.audit.enabled: true              # 是否启用审计日志,默认为 false ,这是付费功能
xpack.screenshotting.browser.chromium.disableSandbox: true  # 运行 Chromium 无头浏览器时,不创建 Linux sandbox
  • 如果 ES 集群包含多个节点,为了让 Kibana 发向 ES 的查询请求实现负载均衡,可以额外部署一个 ES 节点,只担任 coordinating 角色,然后让 Kibana 将查询请求都发给它。
  • Kibana 的 Discover 页面支持生成 png、pdf 格式的报告。为了实现该功能,Kibana 内部运行了一个 Chromium 无头浏览器。
    • 为了避免执行危险代码,Chromium 无头浏览器默认会在 Linux sandbox 中运行,因此每次重启 Kibana 时会创建一个随机的 data/chromium-xx 目录。如果在容器中运行 Kibana ,则已经隔离了运行环境,可关闭 Linux sandbox 功能。

# 用法

  • Kibana 的主要功能:
    • 查询 ES 中的数据,并可以创建仪表盘,便于分析。
    • 管理 ES 的索引,进行多种配置。
    • 支持在网页上上传日志文件,解析后存储到 ES ,便于测试。
  • 访问 URL /status 可查看 Kibana 自身的状态。
  • Kibana 会将自身的数据存储在 ES 中名为 .kibana 的索引中。
  • Kibana 网站是单页面应用,但是加载网页时很慢,刷新首页都需要 5 秒。
  • 建议在 Kibana 网站上进行以下设置:
    • 设置 Default 工作区,只显示 Kibana、Observability 中需要用到的部分功能。
    • Date format :显示的日期格式,比如 YYYY/MM/D HH:mm:ss.SSS
    • defaultRoute :Kibana 网站登录之后默认跳转的页面,比如 /app/discover
    • Maximum table cell height :Discover 页面每个文档显示的最大高度。建议设置为 0 ,即取消限制。否则一个文档包含的内容过长时,可能显示不全。
    • Number of rows :Discover 页面查询时返回的文档最大数量。
      • 默认值为 500 ,减小该值可以降低查询的耗时,特别是每个文档体积较大时。
      • 查询到文档之后,会先在浏览器中显示一部分文档。当用户向下翻页时,才动态加载后续的文档,直到显示出查询到的所有文档。

# Discover

  • Kibana 的 Discover 页面原本名为 Logs UI ,用于查询、查看日志。但现在扩展了用途,可对所有 ES 文档进行可视化查询。

  • 页面示例:

    • 页面左上方是搜索栏,支持输入任意字符串进行全文搜索,也支持复杂的查询表达式。
    • 页面右上方是时间筛选,支持筛选任意时间范围,或最近一段时间,还支持设置自动刷新的时间间隔。
      • 注意要选择有效的时间范围,否则查询结果可能为空。
    • 页面左侧可选择索引模式、显示的字段。
      • 需要事先在 Kibana 管理页面创建 index pattern ,且字段列表变化时,需要手动点击刷新按钮。
    • 页面中央是一个时间轴,显示每个时刻命中的 document 数量。
    • 页面中下方是一个列表,显示所有查询结果。
      • 每行一条 document ,点击某个 document 左侧的下拉按钮,就会显示其详细信息。
      • 默认显示 Time 和 _source 字段,可以在左侧栏中指定其它字段用作显示。
    • 点击搜索栏前端的保存按钮,可以保存当前的 query 配置,包括查询表达式、字段筛选、时间筛选。
    • 点击页面右上角的 Save 按钮,可以会保存当前的搜索页面,包括查询表达式、字段筛选、显示的字段,但不包括时间筛选。
  • 搜索时,默认采用 Kibana 自带的查询语言 KQL 。

    • 例:
      elastic search            # 模糊查询,查询包含任一单词的文档。要求分词之后的单词完全匹配,比如 elastic 与 elasticsearch 是不同单词
      elastic*                  # 可以使用通配符,模糊匹配一个单词
      "elastic search"          # 加上定界符,要求文档包含该字符串
      elastic AND NOT search    # 支持使用 and、or、not 逻辑运算符
      
    • 支持用 : 对指定字段进行查询:
      agent_* : filebeat-*      # 支持在字段名、值中使用通配符
      agent_name: *             # agent_name 字段存在
      NOT agent_name: *         # agent_name 字段不存在
      status_code : (401 OR 403 OR 404)
      status_code : 200 AND NOT (tags : (success AND info))
      
    • 点击页面右上角的 Inspect ,可以查看查询的耗时、对应的 query 语句。

# Fleet

  • Kibana 的 Fleet 页面原本名为 Ingest Manager ,用于批量管理 Elastic Agent 。