APIによって報告されたシェルクロールのLinuxシステムメトリック

  1. 背景

     (1)システムは、複数のユーザーフレンドリーで構成された輸送システムの実行カスタムに遭遇する、カスタマイズした構成の監視は、民間の監視プラットフォーム構成のカテゴリに属する​​ことは平和維持プロセスに属していない、とパーソナライズされた指標珍しい問題は予期しない問題にシステムの原因となりますプログラムは、リスクを実行します。このシナリオのために、私たちは、スクリプトまたはエージェントが保護システムの目的を達成するために、独自の検査システムチェックを提供します。システムは、次のようにスクリプトがあることを検出します。


  2.システムは、実際のスクリプトを収集します。

#!/ binに/のbash 
#は、システム情報スクリプトフェッチ
{関数CURRENT_DATE() 
:%M:%S "` "start_current_date =" 'DATE" +%Y-M-%D %% H 
エコーstart_current_date $ {} 
} 
 
関数をinit_logs(){ 
LOG_DIR = "/ CHJ /ログ/" 
LOG_FILE = "/ CHJ /ログ/ pushData.log" 
IF [-f $ {} LOG_FILE] 
次に
   LOG_FILE $を{エコー} 
   タッチLOG_FILE} {$    
   エコー$を{LOG_FILE } 
Fiの    
} 
 
.. 1#IPアドレス取得システムの
機能getSysIp(){ 
IPADDR = $(/ binに/ホスト名-i)
エコー$ IPADDR 
} 
 
有効な解析DNS DNS ;.があるかどうかを#2のチェック
機能getSysDnsは、(){ 
    ドメイン=「やります「.chj.cloud 
    他 
    IF DIG @ 172.21.2.10 $ドメイン+ショート| grepを'[0-9]'>を/ dev / null;その後、
        エコー"真の" 
        エコー"FALSE" 
    Fiが
 
#3取得システム環境変数ENV 

機能getSysEnv(){ 
ENVFILE =の/ etc /のprofile.d / chj-common.sh 
IF [-f $ ENVFILE]  
次に
   ENV = $(grepを"RUNTIME_ENV =" ENVFILE $ |のawk -F "=" '$ {2}印刷')
   エコー$ ENV 
   エコー"なし" 
Fiの
} 
 
#取得アプリケーション名4。。
 
機能getJavaName(){ 
APPNAME = $(PS -ef | grepをjavaの|はgrep -v "はgrep" |ヘッド-1 | awkの-F "-D" '$ {2}を印刷' | awkの-F "=" '$ {2}印刷')
エコー$ APPNAME 
} 
 
 
。#5取得するJavaアプリケーション。 JVMパラメータ
機能getJavaInfo(){ 
APPINFO = $(PS -ef | grepのJavaの|はgrep -v "grepの"|ヘッド-1 | sedのさん/ [[:スペース:]] / - / G ') 
エコー"のappinfo $"
} 
 
  
#取得アプリケーションポート6。
機能getAppPort(){ 
apppid = $(psの-ef | grepをjavaの|はgrep -v "はgrep" | / binに/ awkの'{$ 2印刷}' |ヘッド-1)
[あれば!-z "$ apppid"] 
次に
    appport = $(netstatの-tulpn |はgrep "$ apppid" | AWK -F ":" '{$ 2印刷}' | / binに/ AWK -F "" '{$ 1印刷}')
    エコー"$ appport" 
     
    エコー"なし" 
Fiの
 
#7获取当前连接TCP。
機能getTcp(){ 
TCP = $(netstatの-anplt |はgrep -vにtcp6 |はgrep -v "127.0.0.1" | grepを"ESTABLISHED" |ソート| awkの![$ 5] ++ {印刷} '| awkは'{、$ 7 $ 5印刷}' | sedのさん/ [[:スペース:]] / - / G' | sedのの/ \ / // G '| sedのの/ sshdを:/ sshdが/' | sedのs'の/-.-// G')
[あれば!-n "
  
8 NATのため#チェック、

機能sysNat(){ 
    「1"ローカルタイムアウト= 
    ローカルターゲット= "www.badu.com" 
    ローカルret_code = `--connectカール-I -S-タイムアウトタイムアウト} $ {$ { HTTP_CODE%-w} {対象} | -n1`尾
    IF [ "$ ret_code X" = "X200"];次に
        エコー」1" 
    他
        エコー"0" 
    Fiを
} 
 
.. 9#アップロード動的呼び出しインターフェースを要求するデータ送信

機能reqDynamicData (){ 
sysipaddr = $ 1 
sysdns = $ 2 
sysenv = $ 3 
のappName = $ 4 
appjvm = $。5 
appPort = $ 6 
conntcp。7 $ = 
NAT = $ 8 
FetchUrl = "http://ops.chj.cloud/dynamic/api/v1"
/ binに/カール"$ fetchUrl" -X POST -H "のContent-Type:アプリケーション/ JSON" -d "{\" instance_ip \ ":\" $ sysipaddr \ "\ "ENV \":\" $ sysenv \ "\ "DNS \":\ "$ sysdns \"、\ "APPNAME \":\ "$ ppName \"、\ "appjvm \":\ "$ appjvm \"、\ "appport \":\" $ appPort \ "\ "apptcp \":\ "$ conntcp \"、\ "\ NAT: "}"" \" \ $ NAT 
} 

 
#10。データ送信

メイン関数(){ 
IP = `getSysIp` 
DNS =` getSysDns` 
ENV = `getSysEnv`の
名=` getJavaName` 
JVM = `getJavaInfo` 
ポート=` getAppPort` 
TCP `getTcp` = 
NAT =` sysNat` 
reqDynamicData $ IP DNS名$はNAT $ TCP $ $ $ $ JVMポート$ ENV 
= `init_logs`ログ
runTime_date current_date` =` 
>> $ログ:エコー"$ runTime_dateアップロードデータ時間"     
} 

メインの


3.デザインデータベースフィールド;

 3.1创建数据库SQL、
 
 CREATE TABLEを`dynamic_Check`(
  ` id` INT(11)NOT NULL AUTO_INCREMENT、
  `ip` VARCHAR(92)は、デフォルトのNULL utf8mb4_bin COLLATE、
  ` dns`のVARCHAR(128)は、デフォルトのNULL utf8mb4_bin COLLATE、
  `env` VARCHAR (64)COLLATE DEFAULTのNULL utf8mb4_bin、
  `appname`テキストCOLLATE utf8mb4_bin、
  DEFAULTのNULL、utf8mb4_bin` appport` VARCHAR(32)COLLATE 
  `appjvm`テキストCOLLATEのutf8mb4_bin、
  ` conn_tcp`テキストCOLLATEのutf8mb4_bin、
  `snat` VARCHAR(32)COLLATE utf8mb4_bin DEFAULTのNULL、
  `日時DEFAULTのNULLをrun_time`、
  PRIMARY KEY(` id`)
)ENGINE = InnoDBのAUTO_INCREMENT = 12 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin  


3.2。数据库表结构

+ ---------- + -------------- + ------ + ----- + --------- + ---------------- + 
| フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| 
+ ---------- + -------------- + ------ + ----- + --------- + ---------------- + 
| ID | INT(11)| NO | PRI | NULL | AUTO_INCREMENT | 
| IP | VARCHAR(92)| YES | | NULL | | 
| DNS | VARCHAR(128)| YES | | NULL | | 
| ENV | VARCHAR(64)| YES | | NULL | | 
| APPNAME | テキスト| YES | | NULL | | 
| appport | VARCHAR(32)| YES | | NULL | | 
| appjvm | テキスト| YES | | NULL | |
| conn_tcp | テキスト| YES | | NULL | |
| SNAT | VARCHAR(32)| YES | | NULL | | 
| RUN_TIME | 日時| YES | | NULL | | 
+ ---------- + -------------- + ------ + ----- + --------- + ---------------- +





おすすめ

転載: blog.51cto.com/breaklinux/2474269