美文网首页应用文章精选监控
基于saltstack自动化部署zabbix-client端实践

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

作者: 金桔文案 | 来源:发表于2016-10-25 11:59 被阅读927次

    参考样例视频教程:

    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

    相关文章

      网友评论

        本文标题:基于saltstack自动化部署zabbix-client端实践

        本文链接:https://www.haomeiwen.com/subject/lreruttx.html