Реализация поведения стекового драйвера по умолчанию в GKE - PullRequest
0 голосов
/ 02 января 2019

Я настраиваю кластер GKE для приложения со структурированной регистрацией json, которое очень хорошо работает с Kibana. Тем не менее, я хочу использовать вместо этого стекдрайвер.

Я вижу, что журналы приложения доступны в stackdriver со стандартными конфигурациями кластера. Журналы отображаются как jsonpayload, но я хочу большей гибкости и конфигурации, и когда я делаю это, следуя этому руководству , все журналы для одного и того же приложения отображаются только как textpayload. В конечном счете, я хочу, чтобы мои журналы продолжали отображаться в jsonpayload, когда я использую конфигурации агента Fluentd для использования преимуществ label_map .

Я следовал руководству по удалению службы ведения журналов по умолчанию и развертыванию агента Fluentd в существующем кластере со следующими версиями GKE.

Информация о версии Gcloud:

Google Cloud SDK 228.0.0
bq 2.0.39
core 2018.12.07
gsutil 4.34

Информация о версии kubectl:

Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.9-gke.5", GitCommit:"d776b4deeb3655fa4b8f4e8e7e4651d00c5f4a98", GitTreeState:"clean", BuildDate:"2018-11-08T20:33:00Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}

фрагмент кластера gcloud описывает фрагмент:

addonsConfig:
  httpLoadBalancing: {}
  kubernetesDashboard:
    disabled: true
  networkPolicyConfig:
    disabled: true
createTime: '2018-12-24T19:31:21+00:00'
currentMasterVersion: 1.10.9-gke.5
currentNodeCount: 3
currentNodeVersion: 1.10.9-gke.5
initialClusterVersion: 1.10.9-gke.5
ipAllocationPolicy: {}
legacyAbac: {}
location: us-central1-a
locations:
- us-central1-a
loggingService: none
masterAuth:
  username: admin
masterAuthorizedNetworksConfig: {}
monitoringService: monitoring.googleapis.com
name: test-cluster-1
network: default
networkConfig:
  network: projects/test/global/networks/default
  subnetwork: projects/test/regions/us-central1/subnetworks/default
networkPolicy: {}
nodeConfig:
  diskSizeGb: 100
  diskType: pd-standard
  imageType: COS
  machineType: n1-standard-1
  serviceAccount: default
nodeIpv4CidrSize: 24
nodePools:
- autoscaling: {}
  config:
    diskSizeGb: 100
    diskType: pd-standard
    imageType: COS
    machineType: n1-standard-1
    serviceAccount: default
  initialNodeCount: 3
  management:
    autoRepair: true
    autoUpgrade: true
  name: default-pool
  status: RUNNING
  version: 1.10.9-gke.5
status: RUNNING
subnetwork: default
zone: us-central1-a

Ниже приведено то, что включено в мою конфигурационную карту для демона fluentd:

<source>
  type tail
  format none
  time_key time
  path /var/log/containers/*.log
  pos_file /var/log/gcp-containers.log.pos
  time_format %Y-%m-%dT%H:%M:%S.%N%Z
  tag reform.*
  read_from_head true
</source>
<filter reform.**>
  type parser
  format json
  reserve_data true
  suppress_parse_error_log true
  key_name log
</filter>

Вот пример журнала json из моего приложения: {"log":"org.test.interceptor","lvl":"INFO","thread":"main","msg":"Inbound Message\n----------------------------\nID: 44\nResponse-Code: 401\nEncoding: UTF-8\nContent-Type: application/json;charset=UTF-8\nHeaders: {Date=[Mon, 31 Dec 2018 14:43:47 GMT], }\nPayload: {\"errorType\":\"AnException\",\"details\":[\"invalid credentials\"],\"message\":\"credentials are invalid\"}\n--------------------------------------","@timestamp":"2018-12-31T14:43:47.805+00:00","app":"the-app"}

Результат с вышеуказанной конфигурацией ниже:

{
insertId:  "3vycfdg1drp34o"  
labels: {
 compute.googleapis.com/resource_name:  "fluentd-gcp-v2.0-nds8d"   
 container.googleapis.com/namespace_name:  "default"   
 container.googleapis.com/pod_name:  "the-app-68fb6c5c8-mq5b5"   
 container.googleapis.com/stream:  "stdout"   
}
logName:  "projects/test/logs/the-app"  
receiveTimestamp:  "2018-12-28T20:14:04.297451043Z"  
resource: {
 labels: {
  cluster_name:  "test-cluster-1"    
  container_name:  "the-app"    
  instance_id:  "234768123"    
  namespace_id:  "default"    
  pod_id:  "the-app-68fb6c5c8-mq5b5"    
  project_id:  "test"    
  zone:  "us-central1-a"    
 }
 type:  "container"   
}
severity:  "INFO"  
textPayload:  "org.test.interceptor"  
timestamp:  "2018-12-28T20:14:03Z"  
}

Я даже пытался обернуть карту json в одно поле, поскольку кажется, что анализируется только поле «log». Я подумал о том, чтобы явно написать синтаксический анализатор, но это казалось невозможным, учитывая, что запись в журнале уже в формате json, а также изменение полей от вызова к вызову и необходимость предугадывать, какие поля анализировать, не будет идеальным.

Я ожидал, что все поля в моем журнале появятся в jsonPayload в записи журнала в стеке драйвера. В конечном итоге я хочу подражать тому, что происходит со службой стека-драйвера ведения журналов по умолчанию в кластере, где наши журналы, по крайней мере, выглядят как jsonPayload.

1 Ответ

0 голосов
/ 08 января 2019

Я подозреваю, что тип tail - ни один формат в вашем файле конфигурации для набора демонов fluentd не помогает.Можете ли вы попробовать установить формат json или multiline и обновить?

type tail

format none

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...