Как добавить отсутствующие метаданные в агент ведения журнала Google

Использование образа докера на основе этого Я создал модуль на GKE. agent будет прослушивать потоковые события через TCP (другие модули приложений будут отправлять события). , а затем перенаправить эти журналы в Google Cloud Logging. В этих событиях отсутствуют некоторые метаданные. Как я могу добавить эту недостающую информацию?

(приложение symfony) -- [monolog] --> (google-fluent-agent) --> (облачное ведение журнала)

google-fluentd.conf:

<match fluent.**>
  type null
</match>

# TCP Connections for fluentd aware applications.
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match **>
  type google_cloud
  # Set the chunk limit conservatively to avoid exceeding the GCL limit
  # of 10MiB per write request.
  buffer_chunk_limit 2M
  # Cap the combined memory usage of this buffer and the one below to
  # 2MiB/chunk * (24 + 8) chunks = 64 MiB
  buffer_queue_limit 24
  # Never wait more than 5 seconds before flushing logs in the non-error case.
  flush_interval 5s
  # Never wait longer than 30 seconds between retries.
  max_retry_wait 30
  # Disable the limit on the number of retries (retry forever).
  disable_retry_limit
</match>

Событие в Google Logging с отсутствующими данными:

{
  metadata: {
    projectId: "my-project"      
    serviceName: "container.googleapis.com"      
    zone: "us-central1-a"      
    labels: {
      container.googleapis.com/cluster_name: "app-staging-a"        
      compute.googleapis.com/resource_type: "instance"        
      compute.googleapis.com/resource_name: "cluster-fluentd-1dom0"        
      container.googleapis.com/instance_id: "296757089355968949"        
      container.googleapis.com/pod_name: ""        
      compute.googleapis.com/resource_id: "296757089355968949"        
      container.googleapis.com/namespace_name: ""        
      container.googleapis.com/container_name: ""        
    }
    timestamp: "2016-05-16T00:25:37.000Z"      
    projectNumber: "10568438715"      
  }
  insertId: "94dadf6548d"    
  log: "symfony.php"    
  structPayload: {
    context: {
      stack: [33]       
      file: "classes.php"        
      type: 16384        
      line: 4156        
      level: 28928        
    }
    level: "INFO"      
    message: "Using an instance of "This_Function_Method" for function "some_stuff" is deprecated."      
  }
}

person Zach    schedule 16.06.2016    source источник


Ответы (1)


Плагин вывода google_cloud пытается для анализа имен пространств имен, модулей и контейнеров из имени входящего в них потока журналов. В обычной настройке это работает, потому что файлы на диске, поступающие из stdout/stderr каждого контейнера, называются именно так. Чтобы добиться похожего поведения при синтаксическом анализе, вам придется аналогичным образом создать имя потока журнала, которое вы отправляете в fluentd (или реализовать собственную логику в пользовательском плагине fluentd).

person Alex Robinson    schedule 16.06.2016
comment
Эта ссылка на github была именно тем, что мне было нужно. Спасибо, Алекс. - person Zach; 20.06.2016