方案設計,從性能上考慮html
下面前三種是用Python開發的,目標是兼容三種採集方式的軟件python
原理要明白django
如何實現自動採集?
subprocess
Linux基本命令
v = subprocess.getoutput('ls')vim
應用場景:機器多的時候centos
每臺服務器都有程序,程序實現採集數據(執行subprocess),而後把數據發送到apiapi
agent程序放在每臺服務器,這是採集本機的數據,速度快,採集完後發送到API
subprocess.getoutput('ifconfig')ruby
agent程序服務器
import subprocess v1 = subprocess.getoutput('ipconfig') # 查看的是本機IP v2 = subprocess.getoutput('dir') # 查看本機 import requests url = 'http://127.0.0.1:8000/asset.html' response = requests.post(url, data={'k1': v1, 'k2': v2}) # 使用request模塊進行post進行訪問 print(response.text)
api程序dom
from django.shortcuts import render,HttpResponse def asset(request): if request.method == "POST": print(request.POST) # 打印接收的內容 return HttpResponse("1001") # 返回值 else: return HttpResponse("用post訪問")
當agent程序訪問的時候,api就接收到了數據,這裏還有一點是,Django中先把csrf註釋ssh
場景:paramiko(機器少)
或者
ssh方式 封裝了Python的paramiko fabric ansible
中控機
遠程鏈接服務器,執行,
結果發送到api
中控機鏈接中的程序
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='192.168.11.126', port=8888, username='root', password='密碼') # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close() print(result.decode()) # 把字節數據轉換 import requests url = 'http://127.0.0.1:8000/asset.html' response = requests.post(url, data={'k1': result}) # 使用request模塊進行post進行訪問 print(response.text)
場景:機器多的時候,公司正在用
salt-master 的interface設置成主機的IP,salt-minionshe
參考: http://repo.saltstack.com/#rhel
Master
1. 安裝salt-master yum install salt-master 2. 修改配置文件:/etc/salt/master interface: 0.0.0.0 # 表示Master的IP 3. 啓動 service salt-master start
Minion
1. 安裝salt-minion yum install salt-minion 2. 修改配置文件 /etc/salt/minion master: 10.211.55.4 # master的地址 或 master: - 10.211.55.4 - 10.211.55.5 random_master: True id: c2.salt.com # 客戶端在salt-master中顯示的惟一ID 3. 啓動 service salt-minion start
注意:
在修改配置文件的時候,interface master 冒號後面要有空格
查看啓動狀態
systemctl status salt-master
systemctl status salt-minion
配置主要是/etc/salt/master 和 /etc/salt/minion
minion要指定指定的IP是主的IP
salt-key -L # 查看已受權和未受權的slave salt-key -A 所有受權 salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒絕指定id的salve salt-key -d salve_id # 刪除指定id的salve
遇到錯誤:
Minion did not return. [No response]
解決:
rm -fr pki/minion/minion_master.pub
重啓服務:
systemctl restart salt-minion
參考:
http://www.cnblogs.com/phennry/p/5419451.html
centos 修改主機名
vim /etc/hostname 經過nmtui修改,以後重啓hostnamed systemctl restart systemd-hostnamed
salt '*' cmd.run 'ls'
salt原理:
RPC
默認維護了消息隊列
發送:master --》消息隊列-》minon1/minon2 接收:minon1/minion2--》臨時隊列--》master
slive 每30分鐘自動執行,而後發送到master
應用場景:公司在使用,