skywalking日志落到es字段timestamp不为date问题解决

背景

在通过skywalking将日志收集到es后,由于skywalking收集的日志(skywalking_log索引)没有date类型的字段导致在es上再索引模式中没有时间范围的查询。

解决思路

skywalking收集的日志有时间戳字段timestamp,只是默认为long类型
于是我们可以通过提前定义字段类型为data来解决这个问题
以下解决方案均在Kibana中进行操作
注意将 下面所有的skywalking_log换成skywalking linux安装部署中oap配置的storage.elasticsearch7.nameSpace值例如skyw_log

  • oap配置
 vim config/application.yml
storage:
  selector: ${SW_STORAGE:elasticsearch7} # 我使用的是es将 h2 改为:elasticsearch7
...
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:"skyw"} # 存储在es中索引的前缀
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} # 改为对应es的ip端口
  • 设置日志删除策略
PUT _ilm/policy/skywalking_log_policy
{
  "policy": {
    "phases": {
      "hot": {                                
        "actions": {
          "rollover": {
            "max_size": "20GB", 
            "max_age": "30d"
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "delete": {
        "min_age": "31d",                     
        "actions": {
          "delete": {}                        
        }
      }
    }
  }
}
  • 创建索引模版 别名skywalking_log的创建是为了在skywalking后台日志上能直接查看
PUT  _template/skywalking_log
{
  "index_patterns": [
    "skywalking_log*"
  ],
  "aliases": {
    "skywalking_log": {}
  },
  "settings": {
    "index": {
      "lifecycle": {
        "name": "skywalking_log_policy",
        "rollover_alias": "skywalking_log"
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "keyword",
        "copy_to": [
          "content_match"
        ]
      },
      "content_match": {
        "type": "text"
        },
      "content_type": {
        "type": "integer",
        "index": false
      },
      "endpoint_id": {
        "type": "keyword"
      },
      "endpoint_name": {
        "type": "keyword",
        "copy_to": [
          "endpoint_name_match"
        ]
      },
      "endpoint_name_match": {
        "type": "text"
        },
      "service_id": {
        "type": "keyword"
      },
      "service_instance_id": {
        "type": "keyword"
      },
      "span_id": {
        "type": "integer"
      },
      "tags": {
        "type": "keyword"
      },
      "tags_raw_data": {
        "type": "binary"
      },
      "time_bucket": {
        "type": "date",
        "format": "yyyyMMddHHmmss"
      },
      "timestamp": {
        "type": "date"
      },
      "trace_id": {
        "type": "keyword"
      },
      "trace_segment_id": {
        "type": "keyword"
      },
      "unique_id": {
        "type": "keyword"
      }
    }
  }
}

  • 删除之前的skywalking_log_xxx(请保证该索引可以换呗删除,否则请自行备份)索引

这样在每天自动生成的索引skywalking_log_xxx就会使用上述模版来生成,timestamp会被设置成date类型。然后此时在–>索引管理–>kibana–>索引模式添加skywalking_log*索引时就会有时间字段了。

你可能感兴趣的:(skywalking,skywalking,elasticsearch,timestamp,日志)