1. 程式人生 > >cmdb項目--1

cmdb項目--1

function ear inf 表示 畫出 aps nec miss loaded

CMDB項目:

cmdb包含的功能:

1、用戶管理,記錄測試,開發,運維人員的用戶表
2、業務線管理,需要記錄業務的詳情
3、項目管理,指定此項目用屬於哪條業務線,以及項目詳情
4、應用管理,指定此應用的開發人員,屬於哪個項目,和代碼地址,部署目錄,部署集群,依賴的應用,軟件等信息
5、主機管理,包括雲主機,物理機,主機屬於哪個集群,運行著哪些軟件,主機管理員,連接哪些網絡設備,雲主機的資源池,存儲等相關信息
6、主機變更管理,主機的一些信息變更,例如管理員,所屬集群等信息更改,連接的網絡變更等
7、網絡設備管理,主要記錄網絡設備的詳細信息,及網絡設備連接的上級設備
8、IP管理,IP屬於哪個主機,哪個網段, 是否被占用等

1、自動化運維:分類:基礎運維和應用運維

2、為什麽需要 自動化運維

技術分享圖片
1. 項目上線:
    流程: 
        產品經理調研(畫出原型圖) ---> 定需求 ---> 三方會談(產品經理, 研發,老大們) ---> 定日期--->測試項目---> 最終上線---> 應用運維
    
    目前: 是把代碼打包給運維, 運維解壓上線
    
    問題: 隨著機器數量的線性增加,運維的工作量也是線性增加, 重復而且是無意義的勞動
    
    解決: 
        1. 寫一個shell腳本, 進行部署
        
2. 搞一個自動化代碼上線系統 必要條件: 服務器的各種信息 (主機名, cpu, 硬盤大小等) ? 2. 監控系統: 檢測服務器的各信息,(硬盤是否滿, cpu的使用率, 內存使用率, 網站服務運行是否正常) 問題: 之前寫簡單的腳本,檢測服務器的信息,比較麻煩 解決: 想將服務器的各種信息,以圖表的形式展示在web界面上(可視化) 必要條件: 服務器的各種信息(主機名, cpu, 硬盤大小等) 3. 自動裝機系統: 問題: 人工去裝機,一臺一臺的裝 解決: 搞一個裝機系統 , cobbler 軟件 必要條件: 服務器的各種信息(主機名, cpu等) ?
4. Excel表格審計管理資產
View Code

cmdb的實現核心

核心目的:收集服務器的信息(cpu,內存,網卡,硬盤等)

實現方式概述:

1.linux命令獲取cpu, 內存,網卡

2.python執行linux的命令 subprocess模塊 getoutput函數

下面為4中具體的實現方案:

1、agent實現:agent方式,可以將服務器上面的Agent程序作定時任務,定時將資產信息提交到指定API錄入數據庫

技術分享圖片

實現原理:其本質就是在各個服務器上執行subprocess.getoutput()命令,然後將每臺機器上執行的結果,返回給主機API,然後主機API收到這些數據之後進行清洗整理,放入到數據庫中,最終通過web界面展現給用戶。

優點:速度快 缺點:需要為每一臺服務器部署一個agent程序 使用場景:服務器比較多的時候

2、ssh實現(基於paramiko模塊)

中控機通過Paramiko(py模塊)登錄到各個服務器上,然後以執行命令的方式去獲取各個服務器上的信息。

技術分享圖片

優點:無agent 缺點:速度慢 使用場景: 服務器比較少的時候

實現代碼實例:

技術分享圖片
import paramiko
   
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname=c1.salt.com, port=22, username=root, password=123)
   
# 執行命令
stdin, stdout, stderr = ssh.exec_command(df)
# 獲取命令結果
result = stdout.read()
   
# 關閉連接
ssh.close()
View Code

3、salt-stack方式

它本質上和第二種方案大致是差不多的流程,中控機發送命令給服務器執行。服務器將結果放入另一個隊列中,中控機獲取將服務信息發送到API進而錄入數據庫。

技術分享圖片

優點:快,開發成本低 缺點:依賴於第三方工具 使用場景: 公司已經使用salt-stack軟件

saltstack的安裝和配置

1、安裝和配置

技術分享圖片
master主機端
"""
1. 安裝salt-master
    yum install salt-master
2. 修改配置文件:/etc/salt/master
    interface: 10.0.0.51    # 表示Master的IP  即本機ip
3. 啟動
    service salt-master start
"""
slave端:
"""
1. 安裝salt-minion
    yum install salt-minion
2. 修改配置文件 /etc/salt/minion
    master: 10.0.0.51           # master的ip地址
    或
    master:
        - 10.211.55.4
        - 10.211.55.5
    random_master: True
    id: c2.salt.com                    # 客戶端在salt-master中顯示的唯一ID
3. 啟動
    service salt-minion start
View Code

2、授權

技術分享圖片
salt-key -L                # 查看已授權和未授權的slave
salt-key -a  salve_id      # 接受指定id的salve
salt-key -r  salve_id      # 拒絕指定id的salve
salt-key -d  salve_id      # 刪除指定id的salve
View Code

3、執行命令

在master服務器上對salve進行遠程操作

技術分享圖片
# salt "主機名"  cmd.run "命令"  
salt c2.salt.com cmd.run  ifconfig

基於api的方式:

import salt.client
local = salt.client.LocalClient()
result = local.cmd(c2.salt.com, cmd.run, [ifconfig])
View Code

參考鏈接:http://www.cnblogs.com/tim1blog/p/9987313.html

4、puppet(ruby語言開發)

每隔30分鐘,通過RPC消息隊列將執行的結果返回給用戶

ASE介紹

技術分享圖片
from Crypto.Cipher import AES
def encrypt(message):
    key = bdfdsdfsasdfdsdfs
    cipher = AES.new(key, AES.MODE_CBC, key)
    ba_data = bytearray(message,encoding=utf-8)
    v1 = len(ba_data)
    v2 = v1 % 16
    if v2 == 0:
        v3 = 16
    else:
        v3 = 16 - v2
    for i in range(v3):
        ba_data.append(v3)
    final_data = ba_data.decode(utf-8)
    msg = cipher.encrypt(final_data) # 要加密的字符串,必須是16個字節或16個字節的倍數
    return msg 
?
# ############################## 解密 ##############################
def decrypt(msg):
    from Crypto.Cipher import AES 
    key = bdfdsdfsasdfdsdfs
    cipher = AES.new(key, AES.MODE_CBC, key)
    result = cipher.decrypt(msg) # result = b‘\xe8\xa6\x81\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8a\xa0\xe5\xaf\x86\xe5\x8a\xa0sdfsd\t\t\t\t\t\t\t\t\t‘
    data = result[0:-result[-1]]
    return str(data,encoding=utf-8)
?
msg = encrypt(你好好愛好愛好sss)
?
res = decrypt(msg)
?
print(res)
View Code

字符格式化函數:

技術分享圖片
String.prototype.format = function(args){
        return this.replace(/\{(\w+)\}/g, function(s, i){
            return args[i];
        });
    };
View Code

 

cmdb項目--1