PlayBook을 통한 Zabbix 배포(6)

18852 단어
title: PlayBook을 통한 Zabbix 배포(6) date: 2018-12-03 19:33:24 tags:
  • Ansible categories: Ansible copyright: true ---

  • Ansible는 새로 등장한 자동화 운영 도구로 Python 개발을 바탕으로 수많은 운영 도구(puppet, cfengine,chef,func,fabric)의 장점을 모았고 대량 시스템 설정, 대량 프로그램 배치, 대량 운행 명령 등 기능을 실현했다. ansible는 모듈 작업을 바탕으로 하는 것이고 그 자체는 대량 배치 능력이 없다. 진정으로 대량 배치를 가진 것은 ansible가 운행하는 모듈이고 ansible는 하나의 구조를 제공할 뿐이다.
    Zabbix는 현재 가장 유행하는 기업급 모니터링 소프트웨어로 사용하기 쉽고 확장성이 매우 강하며 풍부한 API 기능을 가지고 있기 때문에 모든 인터넷 회사의 표준적인 운영 구성 요소가 되었다.Zabbix의 기본 구조는 C/S 구조입니다. 물론 zabbix도 Proxy 에이전트를 지원합니다. 이 글은 플레이북 시나리오를 사용하는 방식으로 Zabbix 구성 요소를 배치하는 방법을 소개합니다.
    Linux 초기화 시나리오 작성
    시나리오를 초기화하고 주요 사용자는 Selinux를 닫고 방화벽을 닫는 것을 실현한다. 아리운의 YUM 원본 주소를 설정하고 EPEL 원본을 설치하여 후기의 zabbix 설치를 위해 깔개 작업을 한다.
    1. Zabbix를 설치하기 전에 우리는 초기화 작업을 만들어야 한다. 우선 키 쌍을 동기화하자.
    [root@localhost ~]# ssh-keygen -t rsa 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:xZxM9bunwBsS03gGT5HGT4LvOnJHdr5Bwl/Iit7qQN8 [email protected]
    The keys randomart image is:
    +---[RSA 2048]----+
    |          .+o.   |
    |         =..=o.  |
    |          Bo.+.  |
    |         . B...o |
    |        S +.B = .|
    |       . . O+=.o |
    |        . ++Eo+ .|
    |        .o+o.+.+ |
    |         +++o o. |
    +----[SHA256]-----+
    
    [root@localhost ~]# ssh-copy-id [email protected]
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host 192.168.10.20 (192.168.10.20) can t be established.
    ECDSA key fingerprint is SHA256:2kWFaV72YVvAl2EU2Zop4uAjP3Gy2jW92d0Va/HrSMM.
    ECDSA key fingerprint is MD5:fc:6c:91:b0:02:e6:7e:98:52:af:0d:b3:47:d4:69:ef.
    Are you sure you want to continue connecting (yes/no)? yes
    [email protected] s password: 
    
    [root@localhost ~]# ssh-copy-id [email protected]
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host 192.168.10.30 (192.168.10.30) cant be established.
    ECDSA key fingerprint is SHA256:2kWFaV72YVvAl2EU2Zop4uAjP3Gy2jW92d0Va/HrSMM.
    ECDSA key fingerprint is MD5:fc:6c:91:b0:02:e6:7e:98:52:af:0d:b3:47:d4:69:ef.
    Are you sure you want to continue connecting (yes/no)? yes
    [email protected]'s password: 
    
    

    2. 그 다음에 대본에 필요한 데이터 파일을 저장하는 디렉터리를 만듭니다. 만약에 설정 파일을 복사해야 한다면 이 디렉터리에 놓아서 대본 호출을 편리하게 해야 합니다.
    [root@localhost ~]# mkdir playbook
    [root@localhost ~]# cd playbook/
    
    [root@localhost playbook]# ls -lh
    total 8.0K
    -rw-r--r--. 1 root root 30 Dec  3 10:45 hosts
    -rw-r--r--. 1 root root 30 Dec  3 10:45 main.yml

    3. 다음에 사용자 호스트 목록을 만듭니다. 여기서 우리는 현재 디렉터리에 Hosts 파일을 만들면 됩니다. 만약에 너무 많은 호스트가 간략하게 쓸 수 있다면.
    [root@localhost playbook]# vim hosts
    [root@localhost playbook]# cat hosts 
    
    [zabbix_server]
    192.168.10.20
    192.168.10.30
    
    #[test]               #    ,    ,   20-100     
    #192.168.10.2[0:100]

    4. 그 다음에 우리는 시나리오를 작성하고 사용자가 목표 호스트에 초기화 작업을 한다. 다음은 코드 세션을 살펴보자.
    ---
    #----------------------------------------------------------
    #    ,     , SELinux
     - hosts: zabbix_server
       tasks:
         - name: off selinux
           shell: setenforce 0
         - name: seline modify enforcing
           lineinfile:
               dest: /etc/selinux/config
               regexp: '^SELINUX='
               line: 'SELINUX=disabled'
         - name: off iptables
           shell: iptables -F
         - name: off iptables
           lineinfile:
               dest: /etc/bashrc
               line: 'iptables -F'
    #----------------------------------------------------------
    #     LAMP  ,  YUM      
     - hosts: zabbix_server
       tasks:
        - name: install LAMP
          yum: name={{item}} state=installed
          with_items:
              - httpd
              - httpd-devel
              - mariadb
              - mariadb-server
              - php
              - php-mysql
        - name: start httpd
          shell: systemctl restart httpd
        - name: start mariadb
          shell: systemctl restart mariadb
    #----------------------------------------------------------

    위의 섹션에서는 몇 가지 중요한 부분에 대해 설명해야 합니다.name: seline modify enforcing 이 라벨 아래에lineinfile 문장은 주로 정규 교체의 목적을 실현했다. 만약에/etc/selinux/config 디렉터리에서 시작이 SELINUX=인 알파벳을 검색하면 자동으로 SELINUX=disabledname: off iptables라는 라벨 아래에lineinfile 문장은/etc/bashrc 맨 아래에 새 필드인 iptables-F를 추가하고 켜서 방화벽 규칙을 자동으로 제거하는 것이 목적이다.
    자, 위의 시나리오 부분에서 초기화 작업을 실현하고 방화벽을 닫는 등 LAMP 환경을 설치할 수 있습니다.
    Zabbix 서버 시나리오 작성
    zabbix-Server에 설치된tasks는 비교적 많다. 데이터베이스의 설치와 설정과 관련되기 때문에 여기서 소개하지 않겠다. 그리고 MySQL은 Ansible가 자체로 가지고 있는 모듈을 사용하지 않고 MySQL 데이터베이스와 사용자의 관리를 한다.task를 작성할 때 Ansible가 자체로 가지고 있는 모듈을 이용하여 설정 관리를 하는 것을 권장한다. 사용하기 편리할 뿐만 아니라 Ansible 공식 모듈은 전체 상태 관리를 잘 한다.
    #   YUM   ,  EPEL ,  Zabbix
     - hosts: zabbix_server
       tasks:
         - name: clear YUM
           shell: rm -fr /etc/yum.repos.d/*
         - name: install YUM EPEL
           get_url: 'url=http://mirrors.aliyun.com/repo/Centos-7.repo dest=/etc/yum.repos.d/CentOS-Base.repo'
         - name: yum install EPEL
           yum: name=epel-release state=installed
         - name: install zabbix.repo
           shell: rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
         - name: install zabbix
           yum: name={{item}} state=installed
           with_items:
               - zabbix-server-mysql
               - zabbix-web-mysql
               - zabbix-agent
         - name: start zabbix-server
           shell: systemctl restart zabbix-server
         - name: start zabbix-agent
           shell: systemctl restart zabbix-agent
    #----------------------------------------------------------
    #          ,  zabbix   .
     - hosts: zabbix_server
       tasks:
         - name: set mariadb password
           shell: mysqladmin -u root password 'ansible'
         - name: create zabbix master databases
           shell: mysql -uroot -pansible -e 'create database zabbix character set utf8 collate utf8_bin;'
         - name: set zabbix master databases grant
           shell: mysql -uroot -pansible -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'
         - name: import zabbix initial data SQL shell
           shell: zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix

    마지막 부분은 Zabbix 프로필을 설정하고 프로필과 관련된 작업, 예를 들어 PHP의 조정 등이다.
    #----------------------------------------------------------
    #          ,    
    
    ---
     - hosts: zabbix_server
       tasks:
         - name: edit zabbix dbhost
           lineinfile:
              dest: /etc/zabbix/zabbix_server.conf
              regexp: '# DBHost=localhost'
              line: 'DBHost=localhost'
         - name: edit zabbix dbpasswd
           lineinfile:
               dest: /etc/zabbix/zabbix_server.conf
               regexp: '# DBPassword='
               line: 'DBPassword=zabbix'
         - name: cp zabbix web
           shell: cp -a /usr/share/zabbix/* /var/www/html/
         - name: chmod web
           shell: chmod 755 -R /var/www/html/*
         - name: chown web
           shell: chown apache.apache -R /var/www/html/*
    
         - name: set php
           shell: echo "date.timezone = Asia/Shanghai" >> /etc/php.ini
         - name: set php
           shell: echo "max_execution_time = 300" >> /etc/php.ini
         - name: set php
           shell: echo "max_input_time = 300" >> /etc/php.ini
         - name: set php
           shell: echo "post_max_size = 32M" >> /etc/php.ini
         - name: set php
           shell: echo "memory_limit = 128M" >> /etc/php.ini
         - name: set php
           shell: echo "mbstring.func_overload = 0" >> /etc/php.ini
    
         - name: start http mysql zabbix
           shell: systemctl restart httpd ; systemctl restart mariadb 
         - name: start http mysql zabbix
           shell: systemctl restart zabbix-server ; systemctl restart zabbix-agent
         - name: enabled http mysql zabbix
           shell: systemctl enable httpd ; systemctl enable mariadb
         - name: start http mysql zabbix
           shell: systemctl enable zabbix-server ; systemctl enable zabbix-agent

    자, 마지막으로 우리가 이 세 가지 내용을 합치면 하나의 완전한 시나리오가 된다. 여기서 설명해야 할 것은 본인이 표준화된 절차에 따라 시나리오를 작성하지 않았기 때문이다. 왜냐하면 만약에 그러면 오히려 입문이 쉽지 않을 것이다. 생산 환경에서 아래의 이런 것들은 충분히 사용할 수 있을 것이라고 믿기 때문이다.
    ---
    #----------------------------------------------------------
    #    ,     , SELinux
     - hosts: zabbix_server
       tasks:
         - name: off selinux
           shell: setenforce 0
         - name: seline modify enforcing
           lineinfile:
               dest: /etc/selinux/config
               regexp: '^SELINUX='
               line: 'SELINUX=enforcing'
         - name: off iptables
           shell: iptables -F
         - name: off iptables
           lineinfile:
               dest: /etc/bashrc
               line: 'iptables -F'
    #----------------------------------------------------------
    #     LAMP  ,  YUM      
     - hosts: zabbix_server
       tasks:
        - name: install LAMP
          yum: name={{item}} state=installed
          with_items:
              - httpd
              - httpd-devel
              - mariadb
              - mariadb-server
              - php
              - php-mysql
        - name: start httpd
          shell: systemctl restart httpd
        - name: start mariadb
          shell: systemctl restart mariadb
    #----------------------------------------------------------
    #   YUM   ,  EPEL ,  Zabbix
     - hosts: zabbix_server
       tasks:
         - name: clear YUM
           shell: rm -fr /etc/yum.repos.d/*
         - name: install YUM EPEL
           get_url: 'url=http://mirrors.aliyun.com/repo/Centos-7.repo dest=/etc/yum.repos.d/CentOS-Base.repo'
         - name: yum install EPEL
           yum: name=epel-release state=installed
         - name: install zabbix.repo
           shell: rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
         - name: install zabbix
           yum: name={{item}} state=installed
           with_items:
               - zabbix-server-mysql
               - zabbix-web-mysql
               - zabbix-agent
         - name: start zabbix-server
           shell: systemctl restart zabbix-server
         - name: start zabbix-agent
           shell: systemctl restart zabbix-agent
    #----------------------------------------------------------
    #          ,  zabbix   .
     - hosts: zabbix_server
       tasks:
         - name: set mariadb password
           shell: mysqladmin -u root password 'ansible'
         - name: create zabbix master databases
           shell: mysql -uroot -pansible -e 'create database zabbix character set utf8 collate utf8_bin;'
         - name: set zabbix master databases grant
           shell: mysql -uroot -pansible -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'
         - name: import zabbix initial data SQL shell
           shell: zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix
    #----------------------------------------------------------
    #          ,    
    
     - hosts: zabbix_server
       tasks:
         - name: edit zabbix dbhost
           lineinfile:
              dest: /etc/zabbix/zabbix_server.conf
              regexp: '# DBHost=localhost'
              line: 'DBHost=localhost'
         - name: edit zabbix dbpasswd
           lineinfile:
               dest: /etc/zabbix/zabbix_server.conf
               regexp: '# DBPassword='
               line: 'DBPassword=zabbix'
         - name: cp zabbix web
           shell: cp -a /usr/share/zabbix/* /var/www/html/
         - name: chmod web
           shell: chmod 755 -R /var/www/html/*
         - name: chown web
           shell: chown apache.apache -R /var/www/html/*
    
         - name: set php
           shell: echo "date.timezone = Asia/Shanghai" >> /etc/php.ini
         - name: set php
           shell: echo "max_execution_time = 300" >> /etc/php.ini
         - name: set php
           shell: echo "max_input_time = 300" >> /etc/php.ini
         - name: set php
           shell: echo "post_max_size = 32M" >> /etc/php.ini
         - name: set php
           shell: echo "memory_limit = 128M" >> /etc/php.ini
         - name: set php
           shell: echo "mbstring.func_overload = 0" >> /etc/php.ini
    
         - name: start http mysql zabbix
           shell: systemctl restart httpd ; systemctl restart mariadb 
         - name: start http mysql zabbix
           shell: systemctl restart zabbix-server ; systemctl restart zabbix-agent
         - name: enabled http mysql zabbix
           shell: systemctl enable httpd ; systemctl enable mariadb
         - name: start http mysql zabbix
           shell: systemctl enable zabbix-server ; systemctl enable zabbix-agent

    이어서 이 설정을 다 쓴 후에, 우리는 아래의 몇 가지 명령을 실행하여, 위의 파일에 문법 오류가 있는지, 호스트 목록이 효력이 발생했는지 검사합니다.
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --syntax-check
    
    playbook: main.yml
    
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --list-task
    
    playbook: main.yml
    
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --list-hosts
    
    playbook: main.yml
    
        pattern: [u'zabbix_server']
        hosts (2):
          192.168.10.20
          192.168.10.30

    실행 시나리오: 확인한 후 아래 명령을 사용하여 원클릭으로 배치합니다. 저희가 쓴 플레이북 시나리오를 잠시 기다리겠습니다.
    [root@localhost playbook]# ansible-playbook -i hosts main.yml
    
    PLAY [zabbix_server] *********************************************************************
    
    TASK [Gathering Facts] *******************************************************************
    ok: [192.168.10.30]
    ok: [192.168.10.20]
    ....  ....
    PLAY RECAP *******************************************************************************
    192.168.10.20              : ok=5    changed=4    unreachable=0    failed=0
    192.168.10.30              : ok=5    changed=4    unreachable=0    failed=0

    이 노트는 Ansible를 사용하여 Zabbix 모니터링 시스템을 신속하게 배치하는 방법을 소개했습니다. 그 중에서 당신은 배치 방면의 기교를 많이 배웠습니까? 사실 ansible도 그렇습니다.
    Zabbix 피제어단 시나리오 작성
    1. Zabbix 클라이언트를 설치하기 전에 우리는 초기화 작업을 만들어야 한다. 우선 키 쌍을 동기화하자.
    [root@localhost ~]# ssh-keygen -t rsa 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:xZxM9bunwBsS03gGT5HGT4LvOnJHdr5Bwl/Iit7qQN8 [email protected]
    The keys randomart image is:
    +---[RSA 2048]----+
    |          .+o.   |
    |         =..=o.  |
    |          Bo.+.  |
    |         . B...o |
    |        S +.B = .|
    |       . . O+=.o |
    |        . ++Eo+ .|
    |        .o+o.+.+ |
    |         +++o o. |
    +----[SHA256]-----+
    
    [root@localhost ~]# ssh-copy-id [email protected]
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host 192.168.10.20 (192.168.10.20) can t be established.
    ECDSA key fingerprint is SHA256:2kWFaV72YVvAl2EU2Zop4uAjP3Gy2jW92d0Va/HrSMM.
    ECDSA key fingerprint is MD5:fc:6c:91:b0:02:e6:7e:98:52:af:0d:b3:47:d4:69:ef.
    Are you sure you want to continue connecting (yes/no)? yes
    [email protected] s password: 
    
    [root@localhost ~]# ssh-copy-id [email protected]
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host 192.168.10.30 (192.168.10.30) cant be established.
    ECDSA key fingerprint is SHA256:2kWFaV72YVvAl2EU2Zop4uAjP3Gy2jW92d0Va/HrSMM.
    ECDSA key fingerprint is MD5:fc:6c:91:b0:02:e6:7e:98:52:af:0d:b3:47:d4:69:ef.
    Are you sure you want to continue connecting (yes/no)? yes
    [email protected]'s password: 
    
    

    2. 그 다음에 대본에 필요한 데이터 파일을 저장하는 디렉터리를 만듭니다. 만약에 설정 파일을 복사해야 한다면 이 디렉터리에 놓아서 대본 호출을 편리하게 해야 합니다.
    [root@localhost ~]# mkdir playbook
    [root@localhost ~]# cd playbook/
    
    [root@localhost playbook]# ls -lh
    total 8.0K
    -rw-r--r--. 1 root root 30 Dec  3 10:45 hosts
    -rw-r--r--. 1 root root 30 Dec  3 10:45 main.yml
    -rw-r--r--. 1 root root 378908 Dec  4 07:04 zabbix-agent-4.0.0-1.1.el7.x86_64.rpm

    3. 다음에 사용자 호스트 목록을 만듭니다. 여기서 우리는 현재 디렉터리에 Hosts 파일을 만들면 됩니다. 만약에 너무 많은 호스트가 간략하게 쓸 수 있다면.
    [root@localhost playbook]# vim hosts
    [root@localhost playbook]# cat hosts 
    
    [zabbix_client]
    192.168.10.20
    192.168.10.30
    
    #[test]               #    ,    ,   20-100     
    #192.168.10.2[0:100]

    4. 대량으로 수정된 플레이북을 작성한다. 이 극본은 매우 작기 때문에 따로 소개할 필요가 없고 한 길로 흑으로 간다.
    ---
     - hosts: zabbix_client
    
       vars:
         - IP: 192.168.10.10
    
       tasks:
          - name: copy zabbix-agent-4.0.0-1.1.el7.x86_64.rpm
            copy: src=./zabbix-agent-4.0.0-1.1.el7.x86_64.rpm dest=/tmp/zabbix-agent.rpm
          - name: install zabbix-agent
            shell: rpm -i /tmp/zabbix-agent.rpm
    
          - name: edit zabbix_agentd.conf
            lineinfile:
               dest: /etc/zabbix/zabbix_agentd.conf
               regexp: 'Server=127.0.0.1'
               line: 'Server={{IP}}'
          - name: edit zabbix_agentd.conf
            lineinfile:
               dest: /etc/zabbix/zabbix_agentd.conf
               regexp: 'ServerActive=127.0.0.1'
               line: 'ServerActive={{IP}}'
          - name: edit zabbix_agentd.conf
            lineinfile:
               dest: /etc/zabbix/zabbix_agentd.conf
               regexp: 'Hostname=Zabbix server'
               line: 'Hostname={{IP}}'
    
          - name: start zabbix
            shell: /usr/sbin/zabbix_agentd
          - name: enable zabbix
            shell: echo "/usr/sbin/zabbix_agentd" >> /etc/bashrc

    이어서 이 설정을 다 쓴 후에, 우리는 아래의 몇 가지 명령을 실행하여, 위의 파일에 문법 오류가 있는지, 호스트 목록이 효력이 발생했는지 검사합니다.
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --syntax-check
    
    playbook: main.yml
    
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --list-task
    
    playbook: main.yml
    
    [root@localhost playbook]# ansible-playbook -i hosts main.yml --list-hosts
    
    playbook: main.yml
    
        pattern: [u'zabbix_client']
        hosts (2):
          192.168.10.20
          192.168.10.30

    실행 시나리오: 확인한 후 아래 명령을 사용하여 원클릭으로 배치합니다. 저희가 쓴 플레이북 시나리오를 잠시 기다리겠습니다.
    [root@localhost playbook]# ansible-playbook -i hosts main.yml
    
    PLAY [zabbix_client] *********************************************************************
    
    TASK [Gathering Facts] *******************************************************************
    ok: [192.168.10.30]
    ok: [192.168.10.20]
    ....  ....
    PLAY RECAP *******************************************************************************
    192.168.10.20              : ok=5    changed=4    unreachable=0    failed=0
    192.168.10.30              : ok=5    changed=4    unreachable=0    failed=0

    전재 대상:https://www.cnblogs.com/LyShark/p/10886486.html

    좋은 웹페이지 즐겨찾기