0

我正在编写自定义日志以进行日志分析。

基于以下链接:

https://docs.microsoft.com/en-us/azure/azure-monitor/logs/data-collector-api#create-a-request

我应该能够在请求标头中使用一个名为:的字段time-generated-field,文档说:“如果您指定一个字段,其内容将用于 TimeGenerated。如果您不指定此字段,则 TimeGenerated 的默认值是时间消息已被摄取。消息字段的内容应遵循 ISO 8601 格式 YYYY-MM-DDThh:mm:ssZ"

我正在传递以下值:(2021-11-11T19:52:45Z作为字符串,因为您不能将其作为日期时间对象传递)但问题是当我查看日志分析工作区时,TimeGenerated 字段是这个(今天的日期):2021-12-01T18:41:04.529Z这是事件被摄取的日期时间,所以基本上,它没有占用2021-11-11T19:52:45Z我在标题中传递的真实事件生成时间。

我在这里做错了吗?

任何帮助将不胜感激,我在这里没有想法了。

4

1 回答 1

1

事实证明,我误读了文档并且没有意识到这time-generated-field不是您传入的参数,而是您发送到日志分析工作区的 JSON 数据主体中的一个属性。

可以以这种方式引用它(这是一种方法的示例):

def post_data(customer_id, shared_key, body, log_type):
    method = 'POST'
    #The string "raised" assigned to the TimeStampField variable below 
    #is an actual property in the JSON object that I am sending to log 
    #analytics, it contains the datetime in the expected format.
    TimeStampField = "raised" 
    content_type = 'application/json'
    resource = '/api/logs'
    rfc1123date = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
    content_length = len(body)
    signature = build_signature(customer_id, shared_key, rfc1123date, content_length, method, content_type, resource)
    uri = 'https://' + customer_id + '.ods.opinsights.azure.com' + resource + '?api-version=2016-04-01'
    headers = {
        'content-type': content_type,
        'Authorization': signature,
        'Log-Type': log_type,
        'x-ms-date': rfc1123date,
        'time-generated-field': TimeStampField
    }

肯定会创建一个拉取请求来修改此处的措辞: https ://docs.microsoft.com/en-us/azure/azure-monitor/logs/data-collector-api#create-a-request 我觉得是不是很直观

于 2021-12-02T16:17:14.727 回答