日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Ansible自动化部署工具-role模式安装filebeat实际案例分析

發布時間:2023/11/16 windows 46 coder
生活随笔 收集整理的這篇文章主要介紹了 Ansible自动化部署工具-role模式安装filebeat实际案例分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是藍胖子,前面一節我簡單的講了講Ansible的架構和編排任務的語法,可以發現,通過playbook方式編排任務時,能夠將任務文檔化,但是在面對比較復雜且不同業務的任務編排時,維護playbook就變得復雜,所以Ansible產生了role模式針對復雜的任務進行編排工作。今天我們就通過一個實際的案例來看看如何使用role模式。

語法以及實際案例

平時我們在進行日志收集的時候,往往會在每臺機器上安裝filebeat,并且由于每臺機器運行服務的不同,那么收集日志的配置文件也是不一樣的,如何快速高效的部署filebeat以及擁有不同的配置文件就是我們要思考的問題,當然不可能一臺機器一臺機器的修改配置文件。

接下來我將會以一個我自己寫的filebeat相關的role舉例,來分析role模式涉及的一些規范以及如何寫一個好的任務編排, 案例中的filebeat的role模式擁有對filebeat的安裝,更新配置的功能。

role其實是對之前使用playbook的文件目錄進行了一些規范(比如必須有roles目錄且和playbook入口文件在同一位置,roles目錄下的各個特定role的目錄也是固定命名的)

代碼已經上傳github

https://github.com/HobbyBear/ansible-role-filebeat.git

整個項目的目錄結構如下所示,filebeatop.yml到時候是我們執行ansible playbook命令的入口文件,我們可以使用這樣的命令使用這個role , ansible-playbook -i hosts filebeatop.yml ,其中hosts目錄就是存放inventory主機清單。

.
├── ReadMe.md
├── filebeatop.yml
├── group_vars
│?? └── test.yml
├── hosts
│?? ├── prod
│?? └── test
└── roles
    └── filebeat
        ├── handlers
        │?? └── main.yml
        ├── tasks
        │?? ├── install.yml
        │?? ├── main.yml
        │?? ├── rpm.yml
        │?? └── updatecfg.yml
        └── templates
            ├── debug.conf
            ├── filebeatbox.yml
            └── log.yml

filebeatop.yml 的內容如下,其中roles配置項可以配置多個role,不過案例中就只配置了一個filebeat的role,這個role的名稱就是上述roles目錄下的filebeat這個文件夾的名稱。同時filebeatop.yml同時設置了變量version和logstashendpoint,不同的是version變量是role級別的。

- hosts: test  
  roles:  
    - role: filebeat  
      version : '7.14.2'  
  vars:  
    logstashendpoint:  192.168.0.2:5054

接著了解下roles目錄的結構,filebeat 就代表一個role,其下有handlers,tasks,templates目錄,它們存放的內容如下,

roles
└── filebeat
    ├── handlers
    │?? └── main.yml
    ├── tasks
    │?? ├── install.yml
    │?? ├── main.yml
    │?? ├── rpm.yml
    │?? └── updatecfg.yml
    └── templates
        ├── debug.conf
        ├── filebeatbox.yml
        └── log.yml
  • tasks 里面存放具體的Ansible 的各種模塊定義的任務,其入口文件是main.yml 它里面可以通過include 引入其他task。就比如這個案例中,我在main.yml 引入了其他配置文件定義的任務。main.yml 代碼如下, 可以看到在引入其他配置文件定義的任務時,我還用tags為任務打上了標簽,這個標簽可以讓我們后續根據特定的標簽執行任務。
-  include: install.yml  
   tags:  
     - install  
  
-  include: rpm.yml  
   tags:  
     - rpm  
  
-  include: updatecfg.yml  
   tags:  
     - updatecfg
  • handlers 目錄下存放任務的后續處理邏輯,它其實也是ansible的模塊定義的各種任務,與tasks不同的是,它是專門放到tasks執行后執行的。例如在handlers的main.yml文件中,我定義了一個名為restart Filebeat service 的handler,handlers/main.yml代碼如下

become 設置為yes,become_method 設置為sudo 代表在運行這個service的命令時是要以sudo權限運行的。

- name: restart Filebeat service  
  become: yes  
  become_method: sudo  
  service:  
    name: filebeat  
    enabled: yes  
    state: restarted

這個handler在tasks/updatecfg.yml中有被用到,如下,在更新完filebeat服務配置后,通過notify配置,定義所需的handler的名稱,便可以在特定task執行完成后運行對應的handler。

- name: 更新服務配置  
  shell: "sudo systemctl daemon-reload"  
  notify:  
    - restart Filebeat service
  • templates 目錄存放的是某些需要用到的配置文件模板,在模板文件中可以使用{{ 變量名 }} 引用,變量的定義可以在前面filebeatop.yml文件中vars,或者roles配置中定義,也可以放到與hosts目錄同級的group_vars 目錄中定義,Ansible 關于變量的定義方式有很多種,這里就不展開了。 拿案例中的group_vars舉例,其目錄下的文件名是inventory主機清單中的機器組的名稱,比如我這里有個test的機器組,所以我在group_vars有個test.yml文件,內容如下,定義了兩個變量 log_path和log_type。
log_path: "- /home/webserver/logs/box-api/box-api.log\r\n    - /home/webserver/logs/box-bsk/box-bsk.log\r\n    - /home/webserver/logs/box-flow/box-flow.log"  
  
log_type:  
  box

這兩個變量被 templates目錄下的log.yml文件所引用。log.yml文件內容如下(是一個典型的filebeat設置日志采集路徑的配置)

- type: log  
  tail_files: true  
  paths:  
    {{ log_path}}  
  fields:  
    log_type: {{ log_type }}

如何使用這些模板文件呢,其實就是通過ansible的template模塊,拿filebeat role中的updatecfg.yml定義的任務片段舉例,將filebeat 相關的配置文件上傳到主機上對應的目錄。

- name: 傳送配置文件  
  become: yes  
  become_method: sudo  
  template: src=log.yml dest=/home/webserver/local/filebeat-{{ version }}-linux-x86_64/log.yml owner=root group=root  
  
- name: 傳送配置文件  
  become: yes  
  become_method: sudo  
  template: src=filebeatbox.yml dest=/home/webserver/local/filebeat-{{ version }}-linux-x86_64/filebeatbox.yml owner=root group=root

??思考如何利用role模式寫好Ansible的任務編排

簡單介紹完整個案例的目錄和相關的文件后,我們從使用角度來分析如何寫一個好的部署任務。

像上述案例中,我們可以執行下面的命令執行相應的部署,更新配置任務。

在filebeatop.yml 中指定要操作的機器組,以及filebeat的版本,日志輸出的logstahsh端點。 在group_vars 中定義每個機器組上需要采集的日志路徑

安裝filebeat軟件包

ansible-playbook -i hosts    filebeatop.yml --tags "install"

安裝filebeat service

ansible-playbook -i hosts    filebeatop.yml --tags "rpm"

更新filebeat配置文件

ansible-playbook -i hosts    filebeatop.yml --tags "updatecfg"

通過filebeat/tasks 引入其他任務配置文件時的 tags去區分要執行的任務,而整個role中則定義對應的組件相關的操作,這樣能更好的維護對應組件的部署配置任務。

并且讓roles相關的文件 只負責部署,而針對哪些機器部署的配置則從roles目錄中分離出來,形成變量。這樣的好處在于,后續對于其他機器組的配置,相同組件的不同版本的配置都可以不用去動roles目錄下的文件了,只需要新增不同的機器組的變量或者修改filebeatop.yml中的版本號即可。

總結

以上是生活随笔為你收集整理的Ansible自动化部署工具-role模式安装filebeat实际案例分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。