PlayBook을 통한 Zabbix 배포(6)
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.