Score:0

วิธีที่ดีที่สุดในการสร้างไฟล์ yaml ที่มีส่วนหมายเลขตัวแปรตามโฮสต์

ธง dz

ฉันกำลังพยายามใช้ ansible เพื่อปรับใช้ไฟล์การกำหนดค่าไปยังเครื่องหลายร้อยเครื่อง ซึ่งเครื่องต่างๆ จะมีข้อมูลโค้ดการกำหนดค่าเฉพาะซ้ำหลายครั้ง โดยเฉพาะอย่างยิ่งฉันใช้ตัวแยกวิเคราะห์บันทึก promtail และเครื่องต่าง ๆ จะมีตำแหน่งไฟล์บันทึกที่แตกต่างกันเพื่อแยกวิเคราะห์ด้วยป้ายกำกับที่แตกต่างกัน ฉันต้องการคงการกำหนดค่าแบบ ansible ไว้อย่างเรียบง่าย ดังนั้นฉันจึงสามารถใช้คำขอดึงข้อมูลเพื่อทำการเปลี่ยนแปลงส่วนต่างๆ ได้

ตอนแรกฉันจะใช้ group_vars และกำหนดตำแหน่งไฟล์บันทึกแต่ละไฟล์ใน group_var ซึ่งใช้งานได้ดีตราบเท่าที่ฉันสร้างตำแหน่งบันทึกเพียงแห่งเดียว เมื่อฉันต้องการตำแหน่งบันทึกหลายตำแหน่ง มันจะหยุดเนื่องจากฉันจะมีเพียงค่าเดียวที่ส่งคืนจาก group_vars

เพื่ออธิบาย

เจ้าภาพ:
    
    LOGFILE1:
      เจ้าภาพ:
        แอป[15:16].qa2.example.com
    LOGFILE2:
      เจ้าภาพ
        แอป[16:17].qa2.example.com



GROUP_VARS/LOGFILE1
GROUP_VARS/LOGFILE2

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

หรือบางทีฉันอาจใช้ไฟล์ตัวแปรภายนอกแล้วใช้เงื่อนไขของการจัดเรียงบางอย่างเพื่อกำหนดว่าโฮสต์ใดได้รับการกำหนดค่าใด

ข้อมูลเดียวกันใน group_vars...

ไฟล์: /opt/tomcat/fxcts/logs/gxxss.log
คอมพ์: TX_Tomcat
แอพ: TX
โมดูล: GXX
ไปป์ไลน์_regex: ไม่มี 
ไปป์ไลน์_vars:
  - ไม่มี
drop_expression: ไม่มี
หลายบรรทัด: ไม่มี

นี่คือเทมเพลตจินจา

Scrape_configs:
- job_name: {{ โมดูล }}
    ไปป์ไลน์_stages:
        - regex:
            นิพจน์: {{ ไปป์ไลน์_regex }}
        - ป้ายกำกับ:
            {% สำหรับป้ายกำกับในไปป์ไลน์_vars -%}
            {{ ป้ายกำกับ }}:
            {% สิ้นสุดสำหรับ %}
{#  นี่คือการทดสอบ #}
        - การประทับเวลา:
            ที่มา: วันที่
            รูปแบบ: 2006-01-01 15:00:00.000000
        - หยด:
            นิพจน์: {{ drop_expression }}
        - หลายบรรทัด:
            เส้นแรก: ""
            max_wait_time: 3 วินาที
            static_configs:
    static_configs:
    - เป้าหมาย:
        - โลคัลโฮสต์
      ป้ายกำกับ:
        แอป: {{ แอป }}
        โฮสต์: {{ ansible_hostname }}
        ส่วนประกอบ: {{ คอมพ์ }}
        __path__: {{ ไฟล์ }}

นี่คือตัวอย่างการกำหนดค่า yaml จริง ดังที่ฉันได้กล่าวไปแล้วว่าตำแหน่งบันทึกที่แตกต่างกันอาจแตกต่างกันไปตามโฮสต์

เซิร์ฟเวอร์:
  http_listen_port: 9080
  grpc_listen_port: 0
ตำแหน่ง:
  ชื่อไฟล์: /tmp/positions.yaml
ลูกค้า:
  - URL: http://host:3100/loki/api/v1/push
Scrape_configs:
- job_name: ระบบ
  static_configs:
  - เป้าหมาย:
      - โลคัลโฮสต์
    ป้ายกำกับ:
      งาน: varlogs
      โฮสต์: ${HOSTNAME}
      __path__: /var/log/*log
- job_name: apps_ssi
  static_configs:
  - เป้าหมาย:
      - โลคัลโฮสต์
    ป้ายกำกับ:
      งาน: ssi
      โฮสต์: ${HOSTNAME}
      __path__: /opt/tomcat/ssi/logs/*log
- job_name: apps_fxcts
  static_configs:
  - เป้าหมาย:
      - โลคัลโฮสต์
    ป้ายกำกับ:
      งาน: fxcts
      โฮสต์: ${HOSTNAME}
      __path__: /opt/tomcat/fxcts/logs/*log
- job_name: วารสาร
  วารสาร:
    json: เท็จ
    max_age: 12ชม
    ป้ายกำกับ:
      งาน: systemd-journal
      โฮสต์: ${HOSTNAME}
  relabel_configs:
    - source_labels: ['__journal__systemd_unit']
      target_label: 'หน่วย'
Zeitounator avatar
fr flag
คุณช่วยแสดงตัวอย่างโครงสร้างข้อมูลของข้อมูลที่คุณใส่ใน group_vars สำหรับการกำหนดค่า promtail ของคุณได้ไหม
flyerhawk avatar
dz flag
ฉันเพิ่มข้อมูล
Zeitounator avatar
fr flag
คุณช่วยเจาะจงมากกว่านี้ได้ไหม ในไฟล์ผลลัพธ์ ส่วนใดของการกำหนดค่าที่ใช้ร่วมกันกับโฮสต์ทั้งหมด และส่วนใดเฉพาะสำหรับกลุ่ม/โฮสต์
flyerhawk avatar
dz flag
ส่วน job_name เป็นตัวแปรตามโฮสต์ บางคนจะมีหนึ่ง job_name คนอื่นจะมี 2 หรือ 3 หรือ 4 ดังนั้นฉันจึงสามารถกำหนดสิ่งนั้นใน host_vars แบบคงที่ได้ แต่นั่นก็เป็น clunky เดิมทีฉันหวังว่าจะใช้ group_vars และจัดกลุ่มโฮสต์ แต่ฉันจะได้รับเพียงค่าเดียวที่ส่งคืนสำหรับตัวแปร
Zeitounator avatar
fr flag
ผ่านไป 2-3 วันแล้วที่ไม่มีการตอบกลับ ดังนั้นฉันเดาว่าคนอื่นๆ คงมีปัญหาเดียวกับฉัน... สำหรับส่วนของฉัน ฉันไม่เข้าใจว่าคุณกำลังพยายามทำอะไรอยู่ และวิธีที่ข้อมูลปัจจุบันของคุณในสินค้าคงคลังสามารถนำไปสู่ ตัวอย่างไฟล์ปรับแต่งที่คุณนำเสนอโดยใช้เทมเพลตปัจจุบันของคุณ ฉันไม่รู้จะตอบอย่างไร
Score:0
ธง it

ฉันขอโทษ แต่มันมากเกินไปที่จะอ่านและเข้าใจอย่างสมบูรณ์ แต่โดยพื้นฐานแล้ว ฉันเข้าใจว่าคุณต้องพุชการกำหนดค่าที่แตกต่างกันไปยังโฮสต์ต่างๆ ตามตำแหน่งไฟล์บันทึกที่จะแยกวิเคราะห์

วิธีแก้ปัญหาของฉัน - เพื่อจับพวกมันทั้งหมด - คือการวนซ้ำเส้นทางทั้งหมดที่คุณต้องการตรวจสอบผ่าน ตัวแยกวิเคราะห์บันทึก promtail และปรับ config ตาม:

---
- ชื่อ: "playbook เพื่อเพิ่มไฟล์ปรับแต่งเฉพาะ"
  โฮสต์: localhost


  งาน:
  
  - ชื่อ: บล็อกสำหรับไฟล์ conf ตัวแยกวิเคราะห์บันทึก promtail
    บล็อก:
      - ชื่อ: ตรวจสอบว่ามีเส้นทางบันทึกอยู่หรือไม่
        สถานะ:
          เส้นทาง: "{{ item.path }}"
        ลงทะเบียน: reg_path
      - ชื่อ: พุชไฟล์ conf หากมีเส้นทาง
        แม่แบบ:
          src: "{{ item.templ }}"
          ปลายทาง: "/etc/promtal/whatever.d/"
        เมื่อ: reg_path.stat.exists
    วนซ้ำ:
      - { ชื่อ: 'syslog', เส้นทาง: '/var/log/syslog', templ: 'syslog.cong.j2'}
      - { ชื่อ: 'ข้อความ' เส้นทาง: '/var/log/messages' เทมเพลต: 'messages.cong.j2'}
      - { ชื่อ: 'apache-acl', เส้นทาง: '/var/log/httpd/access.log', templ: 'apache-acl.cong.j2'}

โค้ด YAML นี้ไม่ได้รับการทดสอบและการกำหนดค่า promtail อาจจำเป็นต้องได้รับการจัดการที่แตกต่างออกไป แต่หวังว่าคุณจะเข้าใจประเด็นของฉัน

Score:0
ธง cn

อีกครั้งไม่แน่ใจว่าฉันทำตามอย่างแน่นอน แต่ถ้าคำตอบของ Roman ใช้ไม่ได้ฉันขอแนะนำให้ใช้ โฮสต์ vars ในโครงสร้างโฟลเดอร์ในคลังของคุณ และสร้างตัวแปรด้วยแผนที่พาธ/เลเบล จากนั้นคุณสามารถวนซ้ำตัวแปรนั้นในเทมเพลต jinja ของคุณ

หากมีพาธและโฮสต์หลายรูปแบบจนไม่สามารถทำได้เมื่อพิจารณาจากจำนวนเครื่อง ฉันขอแนะนำให้คุณลองสร้างมาตรฐานตำแหน่ง/ป้ายกำกับ หรือใช้เครื่องมืออื่นที่ไม่ใช่พรอมเทลที่สามารถจัดการไฟล์ที่ขาดหายไปได้ ด้วยวิธีนี้คุณสามารถจัดการรายการบันทึกจำนวนมากเพื่อขูดและไม่ต้องกังวลกับการเปลี่ยนแปลงอะไร

ตัวเลือกสุดท้ายที่ฉันสามารถแนะนำได้คือการย้อนกลับวิธีการ: ค้นหาเครื่องมือที่ให้คุณใช้โฟลเดอร์สำหรับการกำหนดค่าและวางไฟล์สำหรับแต่ละเครื่องมือที่ต้องการการตรวจสอบ สิ่งที่ฉันหมายถึงคือคุณมีโฟลเดอร์ /etc/logscraper/conf.d ซึ่งรวมอยู่ในการกำหนดค่า จากนั้นแต่ละเครื่องมือจะสร้างไฟล์ภายในนั้นเช่น /etc/logscraper/conf.d/10-tool.confและจะกำหนดวิธีการแยกวิเคราะห์บันทึก ด้วยวิธีนี้คุณสามารถปรับใช้กับเครื่องมือเอง ไม่ใช่เครื่องมือบันทึก สิ่งนี้มีประโยชน์เพิ่มเติมในการรักษาการกำหนดค่าที่เกี่ยวข้องกับผลิตภัณฑ์/เครื่องมือ (เช่น apache) ภายใน playbook ที่กำลังปรับใช้ผลิตภัณฑ์

flyerhawk avatar
dz flag
ฉันเลิกใช้ host_vars เพื่อแก้ปัญหา ไม่เหมาะ แต่ใช้งานได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา