kubernetes container_name มี null ใน fluentdconfiguration

Sep 22 2020

ฉันพยายามรับบันทึกจากที่เก็บแอปพลิเคชันของฉันและแนบเอเจนต์บันทึกที่คล่องแคล่วเป็นคอนเทนเนอร์ด้านข้างในโครงการของฉัน และฉันต้องการรับบันทึกว่ามาจากแอปพลิเคชันใดในแผงควบคุม Kibana ของฉัน นั่นเป็นเหตุผลที่ฉันกำหนดค่าแบบนั้นได้อย่างคล่องแคล่ว

<source>
  @id fluentd-containers.log
  @type tail
  path /var/log/containers/mylog*.log
  pos_file /var/log/es-containers.log.pos
  time_format %Y-%m-%dT%H:%M:%S.%NZ
  tag kubernetes.myapp.container
  read_from_head true
  <parse>
    @type none
  </parse>
</source>

<filter kubernetes**>
  @type record_transformer
  enable_ruby true
  <record>
    service_name ${tag_parts[1]} instance_name ${record["kubernetes"]["container_name"]}
    log_type ${tag_parts[2]} host_name ${hostname}
    send_to "ES"
  </record>
</filter>

<match kubernetes.**>
  @type stdout
</match>

แต่เมื่อผมใช้งานมัน${[record[""]["container_name"]}ได้ null unknown placeholder ${record["kubernetes"]["container_name"]}การแสดง โปรดช่วยฉันวิธีแก้ไขด้วยขอบคุณ

ได้รับข้อความแสดงข้อผิดพลาดนั้น

0 ดัมพ์เหตุการณ์ข้อผิดพลาด: error_class = RuntimeError error = "failed to expand record[\"kubernetes\"][\"container_name\"]: error = undefined method []' for nil:NilClass" location="/fluentd/vendor/bundle/ruby/2.6.0/gems/fluentd-1.11.2/lib/fluent/plugin/filter_record_transformer.rb:310:in rescue in expand '" tag = "kubernetes.myapp.container" time = 2020-09-23 11: 29: 05.705209241 +0000 record = {"message" => "{" log ":" I0923 11: 28: 59.157177 1 main.go: 71] ตรวจสุขภาพเรียบร้อยแล้ว \ n "," stream ":" stderr "," time ":" 2020-09- 23T11: 28: 59.157256887Z "}"}

`

คำตอบ

1 Azeem Sep 24 2020 at 03:16

ไม่ได้มีฟิลด์ที่จำเป็นที่คุณต้องการในการเข้าถึงเช่นrecordrecord["kubernetes"]["container_name"]

คุณต้องแน่ใจว่ามีช่องเหล่านั้น

โปรดไปที่การปรับใช้คอนเทนเนอร์และปลั๊กอินkubernetes_metadata_filterสำหรับข้อมูลโดยละเอียดเกี่ยวกับเรื่องนี้