优秀的编程知识分享平台

网站首页 > 技术文章 正文

使用ansible批量给服务器部署node_exporter服务

nanyue 2024-08-09 07:12:23 技术文章 9 ℃

简介

在部署监控的时候,我们可以使用ansible批量自动化部署,只要写好ploybook即可。

在prometheus监控系统中,node_exporter 是用于获取主机指标的服务,我们可以利用ansible批量部署的优势,来部署node_exporter服务到主机上。

playbook

node_exporter是Go写的,直接使用二进制文件就可以执行,这里直接从github上下载安装,也可以替换成自己内网的地址,针对Centos6和CentOS7/8设置不同的启动服务。



vim install_node_exporter.yml

直接使用vim,就可以开始写yml文件了。

- name: 安装node_exporter
  hosts: "{{ hosts }}"
  remote_user: root
  vars:
    - node_exporter_package: "https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz"
  tasks:
    - name: 解压安装包
      unarchive:
        src: "{{ node_exporter_package }}"
        dest: /usr/local/
        mode: '0755'
        remote_src: yes
    - name: 创建软链接
      file:
        src: /usr/local/node_exporter-1.0.1.linux-amd64
        dest: /usr/local/node_exporter
        state: link
    - name: 安装系统服务(sysv)
      blockinfile:
        path: /etc/init.d/node_exporter
        create: yes
        mode: '0755'
        block: |
          #!/bin/bash

          RETVAL=0
          PROG="node_exporter"
          EXEC="/usr/local/node_exporter/node_exporter"
          LOCKFILE="/var/lock/subsys/$PROG"
          OPTIONS=""

          # Source function library.
          if [ -f /etc/rc.d/init.d/functions ]; then
              . /etc/rc.d/init.d/functions
          else
              echo "/etc/rc.d/init.d/functions does not exist"
              exit 0
          fi
?
          start() {
              if [ -f $LOCKFILE ]
              then
                  echo "$PROG is already running!"
              else
                  echo -n "Starting $PROG: "
                  nohup $EXEC $OPTIONS >/dev/null 2>&1 &
                  RETVAL=$?
                  [ $RETVAL -eq 0 ] && touch $LOCKFILE && success || failure
                  echo
                  return $RETVAL
              fi
          }
?
          stop() {
              echo -n "Stopping $PROG: "
              killproc $EXEC
              RETVAL=$?
              [ $RETVAL -eq 0 ] && rm -r $LOCKFILE && success || failure
              echo
          }
?
          restart ()
          {
              stop
              sleep 1
              start
          }
?
          case "$1" in
              start)
                  start
              ;;
              stop)
                  stop
              ;;
              status)
                  status $PROG
              ;;
              restart)
                  restart
              ;;
              *)
                  echo "Usage: $0 {start|stop|restart|status}"
                  exit 1
          esac
          exit $RETVAL
      when: ansible_distribution_major_version == "6"
    - name: 安装系统服务(systemd)
      blockinfile:
        path: /usr/lib/systemd/system/node_exporter.service
        create: yes
        mode: '0755'
        block: |
          [Unit]
          Description=Node Exporter
?
          [Service]
          WorkingDirectory=/usr/local/node_exporter/
          ExecStart=/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/node_exporter.yml
?
          [Install]
          WantedBy=multi-user.target
      when: ansible_distribution_major_version == "7" or ansible_distribution_major_version == "8"
    - name: 启动服务
      service:
        name: node_exporter
        state: restarted
        enabled: yes

总结

让运维更高效!

Tags:

最近发表
标签列表