本文以日志数据为例,介绍如何通过 OpenSearch 的 Data Streams 和 ISM 功能轻松实现时序数据的管理。
在时序数据场景(例如日志数据)中,为了防止单个索引大小无限增长,常见的数据管理方法是将数据按天存储,每天通过 Rollover 切换到一个新的写索引,同时通过别名保证旧索引能被检索。这个数据管理流程包含了众多步骤,包括创建索引别名、创建 Rollover 数据管理策略、创建初始化索引、设置可写索引等步骤,操作流程比较繁琐。
Data Streams 就是为时序数据管理场景而设计的功能,极大地简化了数据管理的配置步骤。本文以 nginx-log-generator 工具模拟生成的 Nginx 日志数据为例,介绍如何通过 OpenSearch 的 Data Streams 和 ISM 的功能组合来简化数据管理工作。
通过公网访问 Dashboards。具体步骤,请参见公网访问 Kibana/Dashboards。
在页面左侧菜单,选择 Management > Dev Tools,进入开发工具页面。
创建索引模板。
创建名称为nginx-logs-template
的索引模板。如果用户写入的索引名称是以 nginx-logs-
开头,则系统会自动将其创建为数据流,同时创建对应的 backing index。
PUT _index_template/nginx-logs-template { "index_patterns": [ "nginx-logs-*" ], "data_stream": {}, "priority": 100 }
说明
数据流默认要求写入的索引带有@timestamp
字段,如果想用其他字段名,可以在创建索引模板的时候显式指定。
PUT /_index_template/nginx-logs-template { "index_patterns": [ "nginx-logs-*" ], "data_stream": { "timestamp_field": {"name": "request_time"} }, "priority": 100 }
rollover_nginx_logs
的 ISM 策略,该策略会把一天前创建的索引自动 Rollover,并创建新的 backing index。PUT _plugins/_ism/policies/rollover_nginx_logs { "policy": { "description": "Rollover policy for nginx logs data stream", "default_state": "rollover", "states": [ { "name": "rollover", "actions": [ { "rollover": { "min_index_age": "1d" } } ], "transitions": [] } ], "ism_template": { "index_patterns": [ "nginx-logs-*" ], "priority": 100 } } }
您需要完成创建索引模板和 ISM 策略的操作后,您才可以开始写入数据。如果写入的索引名称匹配到nginx-logs-*
模式,系统就会自动创建对应的 Data Stream 和写入索引。
本文选择通过 Logstash 的 OpenSearch Output插件 将 Nginx log 写入到 OpenSerach 实例中。Logstash 采集管道配置如下:
input { file { path => "/tmp/nginx.log" type => "nginx" start_position => "beginning" } } filter { grok { match => { "message" => ['%{IPORHOST:remote_addr} - - \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{DATA:referrer}\" \"%{DATA:agent}\"'] } } } output { opensearch { # 目标OpenSearch实例的访问地址。 hosts => ["https://localhost:9200"] # 索引名称。 index => "nginx-logs-devbox" action => "create" # 目标OpenSearch实例的鉴权信息。 user => "XXXX" password => "XXXXX" # 是否仅用hosts配置项数组中的https地址进行请求。 ssl => true # 当使用https连接实例时,是否验证实例的服务端证书。 ssl_certificate_verification => false } }
ISM 会把执行记录保存到索引.opendistro-ism-managed-index-history*
中,您可以在 Dashboards 中像常规索引数据的可视化查询方法一样查询 ISM Policy 策略的历史执行记录。
如果您在使用 ISM 策略时碰见异常问题或存在疑问,可以查看开源文档ISM error prevention resolutions。
如果仍然无法解决你的问题,您还可以通过提交工单进行咨询,详情请参见技术支持。