您的位置:首页 > 其它

基于saltstack自动化部署zabbix-client端实践

2016-10-24 17:18 555 查看
参考样例视频教程:

http://www.roncoo.com/course/view/fb3050a5b34b42f39ccad83ebebc89c1

一、软件版本

操作系统:CentOS-6.5-x86_64

salt版本:2015.5.2(直接yum源码安装)

zabbix版本:3.0.3

二、部署环境规划

名称
IP
主机名
配置
Slat-master
192.168.63.205
Zabbix_server
2核、2G
Salt-client
192.168.63.184
Zabbix_client
2核、2G
三、zabbix-server(slat-master)架构图如下:



图解说明:

(1) zabbix_server和saltstack同时安装在同一台服务器上。

(2) 通过编写配置文件和批量文档,由zabbix_server这台主机进行推送。

注:当在centos 6.5这样进行安装zabbix_server的时候注意,php的版本必须是在5.4以上,可以使用;

Saltstack可以使用epel源直接进行安装。

四、salt的安装(192.168.63.205)

1、安装epel源:

#rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2、安装master并修改配置文件启动:

# yum install salt-master -y

修改配置文件:

# vim /etc/salt/master

auto_accept: True(自动接口客户端key)

# /etc/init.d/salt-master start

3、安装salt-minion并修改配置文件(salt_client):

# yum install salt-minion -y

修改配置文件:

# vim /etc/salt/minion

master: 192.168.10.205(指向master端)

# /etc/init.d/salt-minion start

4、验证客户端是否已经接收客户端key:

# salt-key -L (如果没有接收到在客户端执行salt-minion -l debug检测过程)

Accepted Keys:

Minion

Zabbix_client

Denied Keys:

Unaccepted Keys:

Rejected Keys:

5、检测是否能够通讯:

# salt 'monitor' test.ping

monitor:

True (表示成功)

五、配置批量管理(在master上操作):

1、修改salt-master配置文件:

# vim /etc/salt/master

file_roots:

base:

- /srv/salt/ (定义sls路径)

pillar_roots:

base:

- /srv/salt/pillar (定义pillar路径:主要存放自定义变量)

2、创建存放目录:

# mkdir /srv/salt/

# mkdir /srv/salt/pillar

3、定义入口文件:查看结构:

# cd /srv/salt/

# ls

pillar top.sls zabbix

# tree

.

├── pillar

│ ├── file.sls

│ └── top.sls

├── top.sls

└── zabbix

├── files

│ ├── zabbix-3.0.3.tar.gz

│ ├── zabbix_agentd

│ └── zabbix_agentd.conf

├── file.sls

├── init.sls

├── install.sls

└── server.s

4、入口文件top.sls:

# cat top.sls (定义所有的主机只是sls的时候去zabbix目录查找相关操作)

base:

'*':

- zabbix

5、zabbix目录下的结构和引导文件init.sls:

# cd zabbix/

# ls

files file.sls init.sls install.sls server.sls

# cat init.sls (定义执行是加载这几个文件)

include:

- zabbix.install

- zabbix.file

- zabbix.server

6、安装包文件zabbix.install:

# cat install.sls

#zabbix.tar.gz

zabbix_source:

file.managed:

- name: /tmp/zabbix-3.0.3.tar.gz

- unless: test -e /tmp/zabbix-3.0.3.tar.gz #(检测目录下是否有这个文件)

- source: salt://zabbix/files/zabbix-3.0.3.tar.gz #(没有的话从files目录下推送一个)

#extract

extract_zabbix:

cmd.run:

- cwd: /tmp #(切换到cmd目录)

- names:

- tar zxvf zabbix-3.0.3.tar.gz #(解压zabbix包)

- unless: test -d /tmp/zabbix-3.0.3

- require: #(表示先执行上面的zabbix_source操作才到下面)

- file: zabbix_source

#user #(创建一个uid为1501的用户)

zabbix_user:

user.present:

- name: zabbix

- uid: 1501

- createhome: False

- gid_from_name: True

- shell: /sbin/nologin

#zabbix_pkgs #(用yum方式安装依赖包)

zabbix_pkg:

pkg.installed:

- pkgs:

- gcc

- openssl-devel

- pcre-devel

- zlib-devel

# - curl-devel

#zabbix_compile

zabbix_compile:

cmd.run:

- cwd: /tmp/zabbix-3.0.3

- names:

- ./configure --with-net-snmp --with-libcurl --enable-agent --prefix=/usr/local/zabbix

- make

- make install

- require: #(完成解压和依赖包之后才执行这步操作)

- cmd: extract_zabbix

- pkg: zabbix_pkg

- unless: test -d /usr/local/zabbix

7、配置文件推送操作:

#cat file.sls #(为了配置方便我这里吧一个zabbix_agentd.conf事先定义好直接推送)

include:

- zabbix.install

config:

file.managed:

- name: /usr/local/zabbix/etc/zabbix_agentd.conf #(查看是否有这个文件)

- user: root

- mode: 644

- source: salt://zabbix/files/zabbix_agentd.conf #(没有从files目录下推送一个)

- template: jinja #(基于jinja模板,这样可以在主服务器定义一些变量)

8、服务配置文件也是从主服务端推送:

# cat server.sls

include:

- zabbix.install

server:

file.managed:

- name: /etc/init.d/zabbix_agentd

- user: zabbix

- mode: 755

- source: salt://zabbix/files/zabbix_agentd

service.running: #(检测并启动)

- name: zabbix_agentd

- enable: True

- reload: True

- watch:

- file: /etc/init.d/zabbix_agentd

9、查看pillar下面的内容,主要存放的是jinja模板调用的变量

# cd /srv/salt/pillar/

# ls

file.sls top.sls

# cat top.sls

base:

'*':

- file

# cat file.sls

server: 192.168.63.205 ##(定义zabbix-server的IP地址)

10、查看files目录下面被推送的几个文件:

# cd /srv/salt/zabbix/files/

# ls

zabbix-3.0.3.tar.gz zabbix_agentd zabbix_agentd.conf

11、zabbix_agentd启动文件:

# cat zabbix_agentd

#!/bin/bash

#

# /etc/rc.d/init.d/zabbix_agentd

#

# Starts the zabbix_agentd daemon

#

# chkconfig: - 95 5

# description: Zabbix Monitoring Agent

# processname: zabbix_agentd

# pidfile: /tmp/zabbix_agentd.pid

# Modified for Zabbix 2.0.0

# May 2012, Zabbix SIA

# Source function library.

. /etc/init.d/functions

RETVAL=0

prog="Zabbix Agent"

ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd"

if [ ! -x ${ZABBIX_BIN} ] ; then

echo -n "${ZABBIX_BIN} not installed! "

# Tell the user this has skipped

exit 5

fi

start() {

echo -n $"Starting $prog: "

daemon $ZABBIX_BIN

RETVAL=$?

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/zabbix_agentd

echo

}

stop() {

echo -n $"Stopping $prog: "

killproc $ZABBIX_BIN

RETVAL=$?

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/zabbix_agentd

echo

}

case "$1" in

start)

start

;;

stop)

stop

;;

reload|restart)

stop

sleep 10

start

RETVAL=$?

;;

condrestart)

if [ -f /var/lock/subsys/zabbix_agentd ]; then

stop

start

fi

;;

status)

status $ZABBIX_BIN

RETVAL=$?

;;

*)

echo $"Usage: $0 {condrestart|start|stop|restart|reload|status}"

exit 1

esac

exit $RETVAL

12、zabbix_agentd.conf配置文件(为了方便配置zabbis_serverIP地址这里从server端推送):

[root@xiaoluo files]# cat zabbix_agentd.conf

# This is a configuration file for Zabbix agent daemon (Unix)

# To get more information about Zabbix, visit http://www.zabbix.com
############ GENERAL PARAMETERS #################

### Option: PidFile

# Name of PID file.

#

# Mandatory: no

# Default:

# PidFile=/tmp/zabbix_agentd.pid

### Option: LogType

# Specifies where log messages are written to:

# system - syslog

# file - file specified with LogFile parameter

# console - standard output

#

# Mandatory: no

# Default:

# LogType=file

### Option: LogFile

# Log file name for LogType 'file' parameter.

#

# Mandatory: no

# Default:

# LogFile=

LogFile=/tmp/zabbix_agentd.log

### Option: LogFileSize

# Maximum size of log file in MB.

# 0 - disable automatic log rotation.

#

# Mandatory: no

# Range: 0-1024

# Default:

# LogFileSize=1

### Option: DebugLevel

# Specifies debug level:

# 0 - basic information about starting and stopping of Zabbix processes

# 1 - critical information

# 2 - error information

# 3 - warnings

# 4 - for debugging (produces lots of information)

# 5 - extended debugging (produces even more information)

#

# Mandatory: no

# Range: 0-5

# Default:

# DebugLevel=3

### Option: SourceIP

# Source IP address for outgoing connections.

#

# Mandatory: no

# Default:

# SourceIP=

### Option: EnableRemoteCommands

# Whether remote commands from Zabbix server are allowed.

# 0 - not allowed

# 1 - allowed

#

# Mandatory: no

# Default:

# EnableRemoteCommands=0

### Option: LogRemoteCommands

# Enable logging of executed shell commands as warnings.

# 0 - disabled

# 1 - enabled

#

# Mandatory: no

# Default:

# LogRemoteCommands=0

##### Passive checks related

### Option: Server

# List of comma delimited IP addresses (or hostnames) of Zabbix servers.

# Incoming connections will be accepted only from the hosts listed here.

# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.

#

# Mandatory: no

# Default:

# Server=

Server={{ pillar['server'] }}

### Option: ListenPort

# Agent will listen on this port for connections from the server.

#

# Mandatory: no

# Range: 1024-32767

# Default:

# ListenPort=10050

### Option: ListenIP

# List of comma delimited IP addresses that the agent should listen on.

# First IP address is sent to Zabbix server if connecting to it to retrieve list of active checks.

#

# Mandatory: no

# Default:

# ListenIP=0.0.0.0

### Option: StartAgents

# Number of pre-forked instances of zabbix_agentd that process passive checks.

# If set to 0, disables passive checks and the agent will not listen on any TCP port.

#

# Mandatory: no

# Range: 0-100

# Default:

# StartAgents=3

##### Active checks related

### Option: ServerActive

# List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks.

# If port is not specified, default port is used.

# IPv6 addresses must be enclosed in square brackets if port for that host is specified.

# If port is not specified, square brackets for IPv6 addresses are optional.

# If this parameter is not specified, active checks are disabled.

# Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]

#

# Mandatory: no

# Default:

# ServerActive=

ServerActive={{pillar['server']}} ##(调用pillar的server里面的IP,推送到客户端)

### Option: Hostname

# Unique, case sensitive hostname.

# Required for active checks and must match hostname as configured on the server.

# Value is acquired from HostnameItem if undefined.

#

# Mandatory: no

# Default:

# Hostname=

#Hostname=Zabbix server

### Option: HostnameItem

# Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.

# Does not support UserParameters or aliases.

#

# Mandatory: no

# Default:

# HostnameItem=system.hostname

### Option: HostMetadata

# Optional parameter that defines host metadata.

# Host metadata is used at host auto-registration process.

# An agent will issue an error and not start if the value is over limit of 255 characters.

# If not defined, value will be acquired from HostMetadataItem.

#

# Mandatory: no

# Range: 0-255 characters

# Default:

# HostMetadata=

### Option: HostMetadataItem

# Optional parameter that defines an item used for getting host metadata.

# Host metadata is used at host auto-registration process.

# During an auto-registration request an agent will log a warning message if

# the value returned by specified item is over limit of 255 characters.

# This option is only used when HostMetadata is not defined.

#

# Mandatory: no

# Default:

# HostMetadataItem=

### Option: RefreshActiveChecks

# How often list of active checks is refreshed, in seconds.

#

# Mandatory: no

# Range: 60-3600

# Default:

# RefreshActiveChecks=120

### Option: BufferSend

# Do not keep data longer than N seconds in buffer.

#

# Mandatory: no

# Range: 1-3600

# Default:

# BufferSend=5

### Option: BufferSize

# Maximum number of values in a memory buffer. The agent will send

# all collected data to Zabbix Server or Proxy if the buffer is full.

#

# Mandatory: no

# Range: 2-65535

# Default:

# BufferSize=100

### Option: MaxLinesPerSecond

# Maximum number of new lines the agent will send per second to Zabbix Server

# or Proxy processing 'log' and 'logrt' active checks.

# The provided value will be overridden by the parameter 'maxlines',

# provided in 'log' or 'logrt' item keys.

#

# Mandatory: no

# Range: 1-1000

# Default:

# MaxLinesPerSecond=20

############ ADVANCED PARAMETERS #################

### Option: Alias

# Sets an alias for an item key. It can be used to substitute long and complex item key with a smaller and simpler one.

# Multiple Alias parameters may be present. Multiple parameters with the same Alias key are not allowed.

# Different Alias keys may reference the same item key.

# For example, to retrieve the ID of user 'zabbix':

# Alias=zabbix.userid:vfs.file.regexp[/etc/passwd,^zabbix:.:([0-9]+),,,,\1]

# Now shorthand key zabbix.userid may be used to retrieve data.

# Aliases can be used in HostMetadataItem but not in HostnameItem parameters.

#

# Mandatory: no

# Range:

# Default:

### Option: Timeout

# Spend no more than Timeout seconds on processing

#

# Mandatory: no

# Range: 1-30

# Default:

# Timeout=3

### Option: AllowRoot

# Allow the agent to run as 'root'. If disabled and the agent is started by 'root', the agent

# will try to switch to the user specified by the User configuration option instead.

# Has no effect if started under a regular user.

# 0 - do not allow

# 1 - allow

#

# Mandatory: no

# Default:

# AllowRoot=0

### Option: User

# Drop privileges to a specific, existing user on the system.

# Only has effect if run as 'root' and AllowRoot is disabled.

#

# Mandatory: no

# Default:

# User=zabbix

### Option: Include

# You may include individual files or all files in a directory in the configuration file.

# Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.

#

# Mandatory: no

# Default:

# Include=

# Include=/usr/local/etc/zabbix_agentd.userparams.conf

# Include=/usr/local/etc/zabbix_agentd.conf.d/

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf ###(自定义包含位置)

####### USER-DEFINED MONITORED PARAMETERS #######

### Option: UnsafeUserParameters

# Allow all characters to be passed in arguments to user-defined parameters.

# The following characters are not allowed:

# \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @

# Additionally, newline characters are not allowed.

# 0 - do not allow

# 1 - allow

#

# Mandatory: no

# Range: 0-1

# Default:

#UnsafeUserParameters=1

### Option: UserParameter

# User-defined parameter to monitor. There can be several user-defined parameters.

# Format: UserParameter=

# See 'zabbix_agentd' directory for examples.

#

# Mandatory: no

# Default:

UserParameter=1

####### LOADABLE MODULES #######

### Option: LoadModulePath

# Full path to location of agent modules.

# Default depends on compilation options.

#

# Mandatory: no

# Default:

# LoadModulePath=${libdir}/modules

### Option: LoadModule

# Module to load at agent startup. Modules are used to extend functionality of the agent.

# Format: LoadModule=

# The modules must be located in directory specified by LoadModulePath.

# It is allowed to include multiple LoadModule parameters.

#

# Mandatory: no

# Default:

# LoadModule=

####### TLS-RELATED PARAMETERS #######

### Option: TLSConnect

# How the agent should connect to server or proxy. Used for active checks.

# Only one value can be specified:

# unencrypted - connect without encryption

# psk - connect using TLS and a pre-shared key

# cert - connect using TLS and a certificate

#

# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)

# Default:

# TLSConnect=unencrypted

### Option: TLSAccept

# What incoming connections to accept.

# Multiple values can be specified, separated by comma:

# unencrypted - accept connections without encryption

# psk - accept connections secured with TLS and a pre-shared key

# cert - accept connections secured with TLS and a certificate

#

# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)

# Default:

# TLSAccept=unencrypted

### Option: TLSCAFile

# Full pathname of a file containing the top-level CA(s) certificates for

# peer certificate verification.

#

# Mandatory: no

# Default:

# TLSCAFile=

### Option: TLSCRLFile

# Full pathname of a file containing revoked certificates.

#

# Mandatory: no

# Default:

# TLSCRLFile=

### Option: TLSServerCertIssuer

# Allowed server certificate issuer.

#

# Mandatory: no

# Default:

# TLSServerCertIssuer=

### Option: TLSServerCertSubject

# Allowed server certificate subject.

#

# Mandatory: no

# Default:

# TLSServerCertSubject=

### Option: TLSCertFile

# Full pathname of a file containing the agent certificate or certificate chain.

#

# Mandatory: no

# Default:

# TLSCertFile=

### Option: TLSKeyFile

# Full pathname of a file containing the agent private key.

#

# Mandatory: no

# Default:

# TLSKeyFile=

### Option: TLSPSKIdentity

# Unique, case sensitive string used to identify the pre-shared key.

#

# Mandatory: no

# Default:

# TLSPSKIdentity=

### Option: TLSPSKFile

# Full pathname of a file containing the pre-shared key.

#

# Mandatory: no

# Default:

# TLSPSKFile=

七、执行批量操作:

#salt 'zabbix_client' state.highstate -v



返回成功标志:



八、登录客户端查看:



查看配置文件:



九、打开web界面添加192.168.63.184这台web服务器:



添加一个简单的linux os模板出图:



到此,用saltstack自动化部署zabbix_client已经完成,有了salt我们在可以帮我们在部署zabbix客户端时候省去很多麻烦,后期有同学用ansible的,可以单独咨询。谢谢

更多课程信息,请关注 龙果学院 官方网站http://www.roncoo.com/

或关注 龙果 微信公众号 RonCoo_com

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: