consul+ansible+shell批量下發註冊node_exporter

--日期:2020年7月21日html

--做者:飛翔的小胖豬node

 文檔功能說明:

    文檔經過ansible+shell+consul的方式實現批量下發安裝Linux操做系統監控的node_exporter軟件,自動加載node_exporter軟件到系統開機啓動中並經過consul註冊的功能。爲部署prometheus系統作好前期準備。python

適用範圍:linux

    文檔試用於centos、redhat系列操做系統。因爲文檔使用了ansible對主機操做,被管理端linux須要有python2.6以上的環境才能使用,對於centos和redhat系統默認只能控制6及以上的系統,6如下的操做系統須要單獨的升級python版本。全部被管主機上請提早安裝好wget工具。
    注:
    對於已有業務承載的6如下操做系統不建議升級python包來實現,該部分機器請手動下發軟件及腳本。web

環境準備:

    ansible服務器一臺        批量操做控制主機節點  shell

    httpd服務器一臺     存放soft文件和腳本文件   bootstrap

    consul服務器一臺         實現自動註冊node_exporter到資源中vim

    ansible和consul能夠部署到一臺設備上,也能夠分開部署。文檔中不涉及到ansible及consul服務的安裝部署操做,若有需求請查看做者其餘部署筆記或本身百度。centos

步驟:

    1.在ansible中添加被管控節點列表瀏覽器

    2.編寫腳本下發軟件及腳本至服務器

    3.實現node_exporter註冊到consul中

    4.檢查查看consul註冊狀況

step1:配置ansible服務及ansible控制清單

文章不對ansible安裝進行介紹,在ansible安裝完成的前提下進行配置。進行配置前須要保證環境中以完成ansible軟件安裝。

配置配置首次經過ssh協議登陸被控主機時不用敲yes。

修改/etc/ansible/ansible.cfg文件中的host_key_checking = False

# vim /etc/ansible/ansible.cfg

# additional paths to search for roles in, colon separated
#roles_path = /etc/ansible/roles

# uncomment this to disable SSH key host checking
host_key_checking = False

# change the default callback, you can only have one 'stdout' type enabled at a time.

 

修改/etc/ssh/ssh_config中StrictHostKeyChecking ask選項爲StrictHostKeyChecking no

# vim /etc/ssh/ssh_config

#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0 StrictHostKeyChecking no # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa

 

編輯/etc/ansible/hosts文件添加須要控制的主機清單,文檔使用明文密碼添加內容。

# vim /etc/ansible/hosts

[node_exporter_group]
node_1   ansible_ssh_host=192.168.111.12   ansible_ssh_user=root    ansible_ssh_pass=yinwan
node_2   ansible_ssh_host=192.168.111.124   ansible_ssh_user=root    ansible_ssh_pass=yinwan

配置說明:

           ansible_ssh_host: 被控主機ip地址或域名

           ansible_ssh_user: 被控主機可訪問用戶

           ansible_ssh_pass: 對應ansible_ssh_user用戶的密碼

 驗證ansible服務配置成功,使用ansible調用命令查看被控主機主機名,若是正常可以顯示出主機名。

 查看ansible中一共有多少個被控主機

# ansible all --list 

 

查看被控主機的主機名,可以正常查看主機名錶示主機可以被ansible服務控制,配置添加成功。

# ansible all -m shell -a 'hostname'

 

 

 

step2:編寫腳本下發軟件及腳本至服務器

實驗使用http放置node_exporter軟件和各類腳本,客戶主機經過wget可從http服務器獲取到資源。在進行軟件及腳本下發前須要讀者自定搭建一個http服務,做者直接使用yum命令安裝了一個httpd服務,把軟件及腳本放置/var/www/html/soft/文件夾中。

腳本說明:

存放地址:/var/www/html/soft/

# ls -l /var/www/html/soft/

get_soft.sh:客戶端主機下載node_exporter軟件、node_exporter啓動腳本。而且完成node_exporter安裝。

auto_start_node_exporter.sh:客戶端啓動node_exporter腳本

auto_consul_zc.sh:使用/etc/ansible/hosts列表生成註冊consul命令

auto_prometh_server.sh:啓動prometheus+consul+alertmanager腳本

# vim get_soft.sh

#!/bin/bash
    if uname -a | grep -i _64 &> /dev/null ;then
        echo "64位處理方式"
        if [ -f /root/node_exporter-1.0.0.linux-amd64.tar.gz ];then
            echo ' node_exporter-1.0.0.linux-amd64.tar.gz file exist'
        else
            if timeout 20  wget -P /root  http://192.168.111.83/soft/node_exporter-1.0.0.linux-amd64.tar.gz;then
                if [ -f  /usr/local/node_exporter/node_exporter ];then
                    echo "node_exporter file exist , not exec command. "
                else
                    if [ -f /root/auto_start_node_exporter.sh ];then
                        echo 'auto_start_node_exporter.sh  exist '
                    else
                        if timeout 20  wget -P /root  http://192.168.111.83/soft/auto_start_node_exporter.sh;then
                            if cat /etc/rc.d/rc.local | grep -i auto_start_node_exporter &> /dev/null ;then
                                echo "file in auto startup  low"
                            else
                                echo '/root/auto_start_node_exporter.sh'  >> /etc/rc.d/rc.local
                                chmod a+x /etc/rc.d/rc.local 
                            fi    
                        else
                            echo 'auto_start_node_exporter.sh  copy faile !! '
                        fi
                    fi
                    mkdir /scripts/soft/   -p
                    tar -zxvf /root/node_exporter-1.0.0.linux-amd64.tar.gz  -C /scripts/soft/   && mv /scripts/soft/node_exporter-1.0.0.linux-amd64/ /usr/local/node_exporter
                    chmod a+x /root/auto_start_node_exporter.sh
                fi 
            else
                echo "node_exporter soft_file copy faile !!"
            fi
        fi
    else
        echo "32位處理方式"
        if [ -f /root/node_exporter-1.0.0.linux-amd64.tar.gz ];then
            echo ' node_exporter-1.0.0.linux-amd64.tar.gz file exist'
        else
            if timeout 20  wget -P /root  http://192.168.111.83/soft/node_exporter-1.0.0.linux-386.tar.gz;then
                if [ -f  /usr/local/node_exporter/node_exporter ];then
                    echo "node_exporter file exist , not exec command. "
                else
                    if [ -f /root/auto_start_node_exporter.sh ];then
                        echo 'auto_start_node_exporter.sh  exist '
                    else
                        if timeout 20  wget -P /root  http://192.168.111.83/soft/auto_start_node_exporter.sh;then
                            if cat /etc/rc.d/rc.local | grep -i auto_start_node_exporter &> /dev/null ;then
                                echo "file in auto startup  low"
                            else
                                echo '/root/auto_start_node_exporter.sh'  >> /etc/rc.d/rc.local
                                chmod a+x /etc/rc.d/rc.local 
                            fi    
                        else
                            echo 'auto_start_node_exporter.sh  copy faile !! '
                        fi
                    fi
                    mkdir /scripts/soft/   -p
                    tar -zxvf /root/node_exporter-1.0.0.linux-386.tar.gz  -C /scripts/soft/   && mv /scripts/soft/node_exporter-1.0.0.linux-386/ /usr/local/node_exporter
                    chmod a+x /root/auto_start_node_exporter.sh
                fi 
            else
                echo "node_exporter soft_file copy faile !!"
            fi
        fi
    fi
View Code

# vim auto_start_node_exporter.sh

#!/bin/bash
if  which netstat &> /dev/null;then
        if netstat -alntup | grep -i 9100 &> /dev/null;then
                echo "9100 port exist  netstat !"
        else
              /usr/local/node_exporter/node_exporter  &> /dev/null &
        fi
elif  which ss &> /dev/null ;then
        if  ss -alntup | grep -i 9100 &> /dev/null;then
                echo "9100 port exist ss ! "
        else
              /usr/local/node_exporter/node_exporter  &> /dev/null &
        fi
else
        echo "未知錯誤,不啓動程序"
fi
View Code

# vim auto_consul_zc.sh

#!/bin/bash
cat /etc/ansible/hosts  | grep -v '\[' | grep -v ^$  | sed 's/=/ /'  | awk '{print $1,$3}' > /prometheus/tmp_consul_list.txt 
sleep 1
cat /prometheus/tmp_consul_list.txt  | while read  host_name    host_addr
do
    echo " curl -X PUT -d ' {\"id\": \"${host_name}\",\"name\": \"${host_name}\",\"address\": \"${host_addr}\",\"port\": 9100,\"tags\": [\"test\",\"node\",\"linux\"],\"checks\":  [{\"http\": \"http://${host_addr}:9100/metrics\", \"interval\": \"5s\"}]}' http://192.168.111.83:8500/v1/agent/service/register "
done
View Code

# vim auto_prometh_server.sh

#!/bin/bash
sleep 1
prometheus --config.file="/usr/local/prometheus/prometheus.yml" --storage.tsdb.retention.time=90d &> /dev/null &
consul agent -server -bootstrap-expect 1 -data-dir=/usr/local/consul_data/data -ui -bind 192.168.111.83 -client 0.0.0.0  &> /dev/null &
alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --cluster.advertise-address=0.0.0.0:9093 &> /dev/null &
View Code

 

 執行ansible批量下發node_exporter和啓動腳本並在主機端自動安裝node_exporter軟件加入啓動腳本到開機啓動。

 在下發以前須要確認被控主機節點有wget命令,若是沒有wget命令則須要先完成wget安裝。

# ansible all -m shell -a 'which wget '

 

 

使用ansible的script模塊執行腳本/var/www/html/soft/get_soft.sh

# ansible all -m  script -a '/var/www/html/soft/get_soft.sh' 

 

 

確認客戶端上是否存在node_exporter軟件,若是存在/usr/local/node_exporter/node_exporter文件表示軟件安裝成功。

# ansible all -m shell -a ' ls -l /usr/local/node_exporter/node_exporter  '

 rc=0表示命令有返回值,則表示文件存在,軟件安裝成功。

 

確認客戶端上是否存在auto_start_node_exporter.sh啓動腳本,若是存在/root/auto_start_node_exporter.sh則啓動腳本獲取成功。

# ansible all -m shell -a ' ls -l /root/auto_start_node_exporter.sh  '

 

  rc=0表示命令有返回值,則表示啓動腳本存在。

 

確認客戶端上是否成功添加啓動腳本到開機啓動,若是/etc/rc.d/rc.local中有/root/auto_start_node_exporter.sh行則開機啓動添加成功。

# ansible all -m shell -a ' cat /etc/rc.d/rc.local  | grep -i  auto_start_node_exporter  '

   rc=0表示命令有返回值,則表示/etc/rc.d/rc.local文件中有/root/auto_start_node_exporter.sh行,表示腳本開機啓動配置完成。

 

經過命令啓動客戶端的node_exporter軟件,啓動後查看客戶主機上9100端口是否處於監聽狀態。

# ansible all -m shell -a 'nohup /root/auto_start_node_exporter.sh '  

 調用客戶端腳本啓動node_exporter軟件。

 

確認客戶端9100端口有node_exporter軟件監聽。

# ansible all -m shell -a 'ss -alntup | grep -i 9100 ' 

 9100端口啓動表示node_exporter軟件安裝完成。可以正常爲prometheus提供數據。

 

step3:註冊客戶端node_exporter到consul

使用shell腳本從/etc/ansible/hosts中提取被控主機信息,自動生成註冊consul命令。

在進行該步驟前須要提早完成consul軟件的安裝與配置。

# source /var/www/html/soft/auto_consul_zc.sh 

 注:

    auto_consul_zc.sh腳本中http://192.168.111.83:8500/v1/agent/service/register中的ip地址是寫死的,讀者請根據本身的consul服務器地址修改。

 

複製腳本生成的命令並執行。

curl -X PUT -d '{"id": "node_1","name": "node_1","address": "192.168.111.12","port": 9100,"tags": ["test","node","linux"],"checks": [{"http": "http://192.168.111.12:9100/metrics", "interval": "5s"}]}'  http://192.168.111.83:8500/v1/agent/service/register 
curl -X PUT -d '{"id": "node_2","name": "node_2","address": "192.168.111.124","port": 9100,"tags": ["test","node","linux"],"checks": [{"http": "http://192.168.111.124:9100/metrics", "interval": "5s"}]}'  http://192.168.111.83:8500/v1/agent/service/register 
View Code

 

 

step4:確認consul註冊信息

使用網頁瀏覽器打開輸入consul服務器的地址端口查看界面中是否有新註冊服務器,若是有則表示註冊成功。

http://192.168.111.83:8500/

 可以在web界面查看到節點表示節點註冊成功,此時能夠在prometheus中添加consul資源實現對數據的收集工做。

相關文章
相關標籤/搜索