summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2019-08-15 21:19:08 +0800
committerlijia <[email protected]>2019-08-15 21:19:08 +0800
commit19538425e0b648beb300aee155f7dc5186be2085 (patch)
tree2b7b0675695df99b0a27b965800c4685b30f4370
parent78c989e3a3b7c475ae790436776c62e6fc7bbf7a (diff)
update
-rw-r--r--deploy_doc/oam_cli_deply.md82
-rw-r--r--deploy_doc/tsg_cli_deploy.md8
-rw-r--r--deploy_etc/tsg_chassis_interface.json1
-rw-r--r--deploy_etc/tsg_chassis_ip.json10
-rw-r--r--deploy_etc/tsg_module_deploy.json12
-rw-r--r--pkg.sh13
-rw-r--r--py_common/common_diagnose.py393
-rw-r--r--py_common/common_logger.py11
-rw-r--r--py_common/common_modules_deploy.py16
-rw-r--r--py_common/common_modules_operator.py4
-rw-r--r--py_common/common_system_cmd.py11
-rw-r--r--py_common/common_whoami.py4
-rw-r--r--py_test/nc_inserto_influxDB.sh8
-rw-r--r--py_test/syslog_test.py10
-rw-r--r--py_tools/get_traffic_by_marsio.py2
-rw-r--r--py_tools/get_traffic_by_proc.py2
-rw-r--r--py_tools/get_traffic_by_psutil.py2
-rw-r--r--py_tools/tsg_diagnose_background.py8
-rw-r--r--py_tools/tsg_monit_intercept.py127
-rw-r--r--py_tools/tsg_monit_interface.py20
-rw-r--r--py_tools/tsg_monit_stream.py26
-rw-r--r--py_tools/tsg_upadte_config.py7
-rw-r--r--service_script/kni_service_scipt61
-rw-r--r--service_script/tsgkni.service16
24 files changed, 589 insertions, 265 deletions
diff --git a/deploy_doc/oam_cli_deply.md b/deploy_doc/oam_cli_deply.md
index 5e4a4d6..0293f59 100644
--- a/deploy_doc/oam_cli_deply.md
+++ b/deploy_doc/oam_cli_deply.md
@@ -1,29 +1,61 @@
-Linux主机测试:
+Linux�������ԣ�
+
+
+����壺192.168.40.161-164
+
+��¼192.168.40.161-4 ����/opt/tsg/targetĿ¼
+
+����֮ǰ����ִ����������
+�鿴һ��agent�Ľ�������û��
+
+ps -ef | grep java
+
+���û����ִ�У�����Ѿ���������Ҫ��
-计算板:192.168.40.161-164
-登录192.168.40.161-4 进入/opt/tsg/target目录
-启动之前可以执行如下命令查看一下agent的进程启动没有
-ps -ef | grep java
-如果没有再执行,如果已经启动则不需要:
nohup java -jar cli-agent-0.0.1-SNAPSHOT.jar &
-交换板:192.168.40.165
-需要进入/opt/tsg/target目录
-可执行一下操作:
+
+
+�����壺192.168.40.165
+
+��Ҫ����/opt/tsg/targetĿ¼
+
+��ִ��һ�²�����
+
./help
-./tsg_record -userlist
-./tsg_record -username root
-./tsg_show -chassis-ip
-./tsg_show -chassis-port
-./tsg_diagnose
-./tsg_policy -query -compileType pxy_intercept
-./tsg_policy_object -query -objectType ip -objectName "Default Object"
-./tsg_software_reboot -mcn_name mcn_node1
-./tsg_software_reboot -mcn_id mcn_node1
-./tsg_software_reboot -mcn_ip 192.168.40.161
-./tsg_software_reboot -all_mcn
-./tsg_hardware_reboot -all_mcn
-./tsg_hardware_reboot -mxn
-./tsg_hardware_reboot -mcn_name mcn_node1
-./tsg_hardware_reboot -mcn_id mcn_node1
-./tsg_hardware_reboot -mcn_ip 192.168.40.161 \ No newline at end of file
+
+./tsg_record --userlist
+
+./tsg_record --username root
+
+./tsg_show --chassis-ip
+
+./tsg_show --chassis-port
+
+./tsg_diagnose
+
+./tsg_policy --query --compileType pxy_intercept
+
+./tsg_policy --query --all --compileType pxy_intercept
+
+./tsg_policy_object --query --objectType ip --objectName 123
+
+./tsg_policy_object --query --all --objectType ip --objectName 123
+
+./tsg_software_reboot --mcn-name mcn1
+
+./tsg_software_reboot --mcn-id 0
+
+./tsg_software_reboot --mcn-ip 192.168.40.161
+
+./tsg_software_reboot --all-mcn
+
+./tsg_hardware_reboot --all-mcn
+
+./tsg_hardware_reboot --mxn
+
+./tsg_hardware_reboot --mcn-name mcn1
+
+./tsg_hardware_reboot --mcn-id 0
+
+./tsg_hardware_reboot --mcn-ip 192.168.40.161 \ No newline at end of file
diff --git a/deploy_doc/tsg_cli_deploy.md b/deploy_doc/tsg_cli_deploy.md
index cacaf5e..3e74a3c 100644
--- a/deploy_doc/tsg_cli_deploy.md
+++ b/deploy_doc/tsg_cli_deploy.md
@@ -3,10 +3,14 @@
/opt/tsg/tools
/opt/tsg/etc
- 更新telegraf.conf的global tags, 本机sn.
+ 更新/设置telegraf.conf的global tags --->sn.
2.计算板文件(4台)
-
+
+
+计算板0:
+监测可拦截、已拦截流量,只在kni的计算板0上部署。
+/opt/tsg/tools/tsg_monit_intercept
3.服务
启动交换板crontab服务:
diff --git a/deploy_etc/tsg_chassis_interface.json b/deploy_etc/tsg_chassis_interface.json
index f43dc2c..5a7fbe1 100644
--- a/deploy_etc/tsg_chassis_interface.json
+++ b/deploy_etc/tsg_chassis_interface.json
@@ -1,5 +1,4 @@
{
- "local_chassis_node": "mcn1",
"interface_list": [{
"dev_name": "eth0",
"dev_type": "marsio",
diff --git a/deploy_etc/tsg_chassis_ip.json b/deploy_etc/tsg_chassis_ip.json
index 46e1c6b..149cced 100644
--- a/deploy_etc/tsg_chassis_ip.json
+++ b/deploy_etc/tsg_chassis_ip.json
@@ -6,22 +6,22 @@
"ip": "192.168.100.5"
}, {
"type": "mcn",
- "name": "mcn1",
+ "name": "mcn0",
"id": 0,
- "ip": "192.168.100.1"
+ "ip": "192.168.200.133"
}, {
"type": "mcn",
- "name": "mcn2",
+ "name": "mcn1",
"id": 1,
"ip": "192.168.100.2"
}, {
"type": "mcn",
- "name": "mcn3",
+ "name": "mcn2",
"id": 2,
"ip": "192.168.100.3"
}, {
"type": "mcn",
- "name": "mcn4",
+ "name": "mcn3",
"id": 3,
"ip": "192.168.100.4"
}]
diff --git a/deploy_etc/tsg_module_deploy.json b/deploy_etc/tsg_module_deploy.json
index 0afcdb3..1671c34 100644
--- a/deploy_etc/tsg_module_deploy.json
+++ b/deploy_etc/tsg_module_deploy.json
@@ -1,12 +1,12 @@
{
"modules_deploy": {
- "mcn0": ["kni", "a.out"],
- "mcn1": ["tfe", "a1.out"],
- "mcn2": ["tfe", "a2.out"],
- "mcn3": ["tfe", "a3.out"]
+ "mcn0": ["kni"],
+ "mcn1": ["tfe"],
+ "mcn2": ["tfe"],
+ "mcn3": ["tfe"]
},
"modules_operator": {
"kni": ["sapp", "r3 sapp", "/home/tsg/kni", "r2", "killall", "exec", "ps"],
- "telegraf": ["teleraf", "#", "#", "#", "systemctl_stop", "systemctl_start", "systemctl_status"]
+ "tfe": ["tfe", "r3_tfe tfe", "/home/tsg/tfe", "r2_tfe", "killall", "exec", "ps"]
}
-} \ No newline at end of file
+}
diff --git a/pkg.sh b/pkg.sh
index 66771f4..11ab096 100644
--- a/pkg.sh
+++ b/pkg.sh
@@ -1,7 +1,8 @@
rm -rf ./py_temp/*
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_cmd/tsg_software_reboot.py
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_cmd/tsg_hardware_reboot.py
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_cmd/tsg_diagnose.py
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_tools/tsg_monit_interface.py
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_tools/tsg_monit_stream.py
-pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp ./py_tools/tsg_update_tags.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_cmd/tsg_software_reboot.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_cmd/tsg_hardware_reboot.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_cmd/tsg_diagnose.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_tools/tsg_monit_interface.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_tools/tsg_monit_stream.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_tools/tsg_update_tags.py
+pyinstaller -F -y --clean --noconsole --distpath ./py_bin --workpath ./py_temp --specpath ./py_temp -p./py_common ./py_tools/tsg_monit_intercept.py
diff --git a/py_common/common_diagnose.py b/py_common/common_diagnose.py
index 25f8234..2282e36 100644
--- a/py_common/common_diagnose.py
+++ b/py_common/common_diagnose.py
@@ -1,171 +1,224 @@
-# coding: utf-8
-#diagnose公共模块, 供cli命令和backgroud后台自动运行工具调用
-import sys
-import time
-import json
-import logging
-import syslog
-import prettytable
-from sys import path
-path.append(r'../py_common') #将存放module的路径添加进来
-path.append(r'../py_cmd') #将存放module的路径添加进来
-from common_telegraf import *
-from common_logger import *
-from common_args import *
-from common_logger import *
-from common_influxdb import *
-from common_whoami import *
-from common_system_cmd import *
-from tsg_software_reboot import *
-
-#syslog 级别:
-#define KERN_EMERG "<0>" /* system is unusable */
-#define KERN_ALERT "<1>" /* action must be taken immediately */
-#define KERN_CRIT "<2>" /* critical conditions */
-#define KERN_ERR "<3>" /* error conditions */
-#define KERN_WARNING "<4>" /* warning conditions */
-#define KERN_NOTICE "<5>" /* normal but significant condition */
-#define KERN_INFO "<6>" /* informational */
-#define KERN_DEBUG "<7>" /* debug-level messages */
-#参数log_level表示高于此级别的才输出, syslog值越小优先级越高,
-#即log_level <= diagnose_level时输出结果, 如果级别高于ERR, 同时写入syslog
-
-#如果没有任何警告和错误, 显示normal
-#所有检测项不能中途退出, 即使有错误, 显示当前检测项的错误后, 继续, 保证全检测一遍
-
-#根据优先级, 设置新的日志等级
-def tsg_set_log_level(old_level, new_level):
- if new_level < old_level:
- return new_level
- else:
- return old_level
-
-
-def tsg_diagnose_for_app(log_level):
- cur_level = syslog.LOG_INFO
- err_code = 0
-
- sled_type,sled_id,sled_name = tsg_whoami()
- if sled_name == "":
- print("can't get local sled name")
- return 1
-
- module_array = tsg_get_local_sled_modules(sled_name)
- if len(module_array) <= 0:
- cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
- ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level],"can't get local sled modules"])
- #print("can't get local sled modules")
- return 1
-
- for module_name in module_array:
- module_operator = tsg_get_module_opertor(module_name)
- if len(module_operator) <= 0:
- cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
- err_msg = "can't get local sled module operator for %s" %(module_name)
- ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level], err_msg])
- #print(err_msg)
- err_code += 1
-
- ret, start_func, stop_func, check_func = tsg_get_operator_by_config(module_operator)
- if ret != 0:
- cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
- err_msg = "can't get operator for %s" %(module_operator[TSG_OP_MODULE_NAME_INDEX])
- ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level],err_msg])
- #print(err_msg)
- err_code += 1
-
- running_flag = check_func(module_operator[TSG_OP_MODULE_NAME_INDEX])
- if running_flag == 0:
- cur_level = tsg_set_log_level(cur_level, syslog.LOG_EMERG)
- err_msg = "app module %s is not running" %(module_name)
- ptable.add_row([g_local_sled_name,"app", G_SYS_LOG_STRING[cur_level],err_msg])
- err_code += 1
-
- #todo, check for restart time
- if cur_level >= syslog.LOG_INFO:
- ptable.add_row([g_local_sled_name,"app", G_SYS_LOG_STRING[cur_level], "normal"])
-
- return err_code
-
-def tsg_diagnose_for_cpu(log_level):
- cur_level = syslog.LOG_INFO
- ptable.add_row([g_local_sled_name,"cpu", G_SYS_LOG_STRING[cur_level],"normal"])
- return 0
-
-def tsg_diagnose_for_mem(log_level):
- cur_level = syslog.LOG_INFO
- ptable.add_row([g_local_sled_name,"memory", G_SYS_LOG_STRING[cur_level],"normal"])
- return 0
-
-def tsg_diagnose_for_disk(log_level):
- cur_level = syslog.LOG_INFO
-
- ret, cmd_res = system_cmd_run("df | awk {'print $1,$5'}")
-
- print(cmd_res.split())
-
- print(len(cmd_res.split()))
- print(cmd_res.split()[0])
- print(cmd_res.split()[1])
- print(cmd_res.split()[2])
-
- ptable.add_row([g_local_sled_name,"disk", G_SYS_LOG_STRING[cur_level],"normal"])
- return 0
-
-def tsg_diagnose_for_interface(log_level):
- cur_level = syslog.LOG_INFO
- sql_str = "select * from interface where PhyRXBits+PhyRXError+PhyRXMissed+PhyRXNoBUF > 0 and time > now() -5m limit 1"
-
- ret, points, msg = tsg_influxb_query(influxdb_client, sql_str)
- if ret == 0:
- for point in points:
- cur_level = tsg_set_log_level(cur_level, syslog.LOG_WARNING)
- msg = "%s has droped %d packets" %(point['device'], int(point['PhyRXBits']) + int(point['PhyRXMissed']) + int(point['PhyRXNoBUF']) )
- ptable.add_row([g_local_sled_name,"physical network", G_SYS_LOG_STRING[cur_level], msg])
-
- if cur_level >= syslog.LOG_INFO:
- ptable.add_row([g_local_sled_name,"physical network", G_SYS_LOG_STRING[cur_level], "normal"])
- return 0
-
- return 1
-
-def tsg_diagnose_for_app_stream(log_level):
- cur_level = syslog.LOG_INFO
- ptable.add_row([g_local_sled_name,"app network", G_SYS_LOG_STRING[cur_level],"normal"])
- return 0
-
-
-def tsg_common_diagnose(log_level):
- #检查app进程是否存在, 是否最近n分钟内重启过
- tsg_diagnose_for_app(log_level)
-
- #检查CPU占用率
- tsg_diagnose_for_cpu(log_level)
-
- #检查mem占用率
- tsg_diagnose_for_mem(log_level)
-
- #检查磁盘占用率
- tsg_diagnose_for_disk(log_level)
-
- #检查物理网络情况
- tsg_diagnose_for_interface(log_level)
-
- #检查应用流量
- tsg_diagnose_for_app_stream(log_level)
-
-if __name__ == '__main__':
- global ptable
- global influxdb_client
- global g_local_sled_name
- type, id, g_local_sled_name = tsg_whoami()
-
- ptable = prettytable.PrettyTable()
- ptable.field_names = ["Sled", "Type", "Level", "Status"]
-
- ret, influxdb_client, msg = tsg_influxdb_init('127.0.0.1', 8086, 'admin', 'tsg2019', 'tsg_stat')
- if ret != 0:
- ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[syslog.LOG_ERR],"can't connect influxDB server"])
-
- tsg_common_diagnose(syslog.LOG_DEBUG)
+# coding: utf-8
+#diagnose公共模块, 供cli命令和backgroud后台自动运行工具调用
+import sys
+import time
+import json
+import logging
+import syslog
+import prettytable
+from sys import path
+path.append(r'../py_common') #将存放module的路径添加进来
+path.append(r'../py_cmd') #将存放module的路径添加进来
+from common_telegraf import *
+from common_logger import *
+from common_args import *
+from common_logger import *
+from common_influxdb import *
+from common_whoami import *
+from common_system_cmd import *
+from tsg_software_reboot import *
+
+#syslog 级别:
+#define KERN_EMERG "<0>" /* system is unusable */
+#define KERN_ALERT "<1>" /* action must be taken immediately */
+#define KERN_CRIT "<2>" /* critical conditions */
+#define KERN_ERR "<3>" /* error conditions */
+#define KERN_WARNING "<4>" /* warning conditions */
+#define KERN_NOTICE "<5>" /* normal but significant condition */
+#define KERN_INFO "<6>" /* informational */
+#define KERN_DEBUG "<7>" /* debug-level messages */
+#参数log_level表示高于此级别的才输出, syslog值越小优先级越高,
+#即log_level <= diagnose_level时输出结果, 如果级别高于ERR, 同时写入syslog
+
+#如果没有任何警告和错误, 显示normal
+#所有检测项不能中途退出, 即使有错误, 显示当前检测项的错误后, 继续, 保证全检测一遍
+
+
+def tsg_diagnose_syslog(user_level, user_msg):
+ if syslog_enable != 0 and user_level <= g_log_level:
+ sys_msg = "[%s] %s" %(G_SYS_LOG_STRING[level], user_msg)
+ syslog.syslog(user_level, sys_msg)
+
+#根据优先级, 设置新的日志等级
+def tsg_set_log_level(old_level, new_level):
+ if new_level < old_level:
+ return new_level
+ else:
+ return old_level
+
+
+def tsg_diagnose_for_app():
+ cur_level = syslog.LOG_INFO
+ err_code = 0
+
+ sled_type,sled_id,sled_name = tsg_whoami()
+ if sled_name == "":
+ print("can't get local sled name")
+ return 1
+
+ module_array = tsg_get_local_sled_modules(sled_name)
+ if len(module_array) <= 0:
+ cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
+ ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level],"can't get local sled modules"])
+ #print("can't get local sled modules")
+ return 1
+
+ for module_name in module_array:
+ module_operator = tsg_get_module_opertor(module_name)
+ if len(module_operator) <= 0:
+ cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
+ err_msg = "can't get local sled module operator for %s" %(module_name)
+ ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level], err_msg])
+ #print(err_msg)
+ err_code += 1
+
+ ret, start_func, stop_func, check_func = tsg_get_operator_by_config(module_operator)
+ if ret != 0:
+ cur_level = tsg_set_log_level(cur_level, syslog.LOG_ERR)
+ err_msg = "can't get operator for %s" %(module_operator[TSG_OP_MODULE_NAME_INDEX])
+ ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[cur_level],err_msg])
+ #print(err_msg)
+ err_code += 1
+
+ running_flag = check_func(module_operator[TSG_OP_MODULE_NAME_INDEX])
+ if running_flag == 0:
+ cur_level = tsg_set_log_level(cur_level, syslog.LOG_EMERG)
+ err_msg = "app module %s is not running" %(module_name)
+ ptable.add_row([g_local_sled_name,"app", G_SYS_LOG_STRING[cur_level],err_msg])
+ err_code += 1
+
+ #todo, check for restart time
+ if cur_level >= syslog.LOG_INFO:
+ ptable.add_row([g_local_sled_name,"app", G_SYS_LOG_STRING[cur_level], "normal"])
+
+ return err_code
+
+def tsg_diagnose_for_cpu():
+ cur_level = syslog.LOG_INFO
+ ptable.add_row([g_local_sled_name,"cpu", G_SYS_LOG_STRING[cur_level],"normal"])
+ return 0
+
+def tsg_diagnose_for_mem():
+ cur_level = syslog.LOG_INFO
+ ptable.add_row([g_local_sled_name,"memory", G_SYS_LOG_STRING[cur_level],"normal"])
+ return 0
+
+
+def tsg_diagnose_disk_usage_check(file_system, usage):
+ cur_level = syslog.LOG_DEBUG
+ msg = "Filesystem %s useage more than %d%%" %(file_system, usage)
+
+ if usage >= 95:
+ cur_level = syslog.LOG_CRIT
+ elif usage >= 90:
+ cur_level = syslog.LOG_WARNING
+ elif usage >= 80:
+ cur_level = syslog.LOG_INFO
+
+ if cur_level <= syslog.LOG_INFO:
+ ptable.add_row([g_local_sled_name,"disk", G_SYS_LOG_STRING[syslog.LOG_CRIT], msg])
+
+ return cur_level
+
+def tsg_diagnose_for_disk():
+ cur_level = syslog.LOG_INFO
+
+ ret, cmd_res = system_cmd_run("df | awk {'print $1,$5'}")
+ df_info = cmd_res.split()
+ max_item_num = len(df_info)
+
+ #从2开始, 跳过第一行Filesystem Use%
+ for i in range(2, max_item_num-1, 2):
+ new_level = tsg_diagnose_disk_usage_check(df_info[i], int(df_info[i+1].split("%")[0]))
+ tsg_set_log_level(cur_level, new_level)
+
+ if cur_level >= syslog.LOG_INFO:
+ ptable.add_row([g_local_sled_name,"disk", G_SYS_LOG_STRING[cur_level],"normal"])
+
+ return 0
+
+def tsg_diagnose_for_interface():
+ cur_level = syslog.LOG_INFO
+ sql_str = "select * from interface where PhyRXBits+PhyRXError+PhyRXMissed+PhyRXNoBUF > 0 and time > now() -5m limit 1"
+
+ ret, points, msg = tsg_influxb_query(influxdb_client, sql_str)
+ if ret == 0:
+ for point in points:
+ cur_level = tsg_set_log_level(cur_level, syslog.LOG_WARNING)
+ msg = "%s has droped %d packets" %(point['device'], int(point['PhyRXBits']) + int(point['PhyRXMissed']) + int(point['PhyRXNoBUF']) )
+ ptable.add_row([g_local_sled_name,"physical network", G_SYS_LOG_STRING[cur_level], msg])
+
+ if cur_level >= syslog.LOG_INFO:
+ ptable.add_row([g_local_sled_name,"physical network", G_SYS_LOG_STRING[cur_level], "normal"])
+ return 0
+
+ return 1
+
+def tsg_diagnose_for_app_stream():
+ cur_level = syslog.LOG_INFO
+ ptable.add_row([g_local_sled_name,"app network", G_SYS_LOG_STRING[cur_level],"normal"])
+ return 0
+
+
+def tsg_common_diagnose_init():
+ global ptable
+ global influxdb_client
+ global g_local_sled_name
+ global g_log_level
+ global syslog_enable
+ global syslog_handle
+ type, id, g_local_sled_name = tsg_whoami()
+
+ #pretty table init
+ ptable = prettytable.PrettyTable()
+ ptable.field_names = ["Sled", "Type", "Level", "Status"]
+
+ #incluxDB init
+ ret, influxdb_client, msg = tsg_influxdb_init('127.0.0.1', 8086, 'admin', 'tsg2019', 'tsg_stat')
+ if ret != 0:
+ ptable.add_row([g_local_sled_name,"common", G_SYS_LOG_STRING[syslog.LOG_ERR],"can't connect influxDB server"])
+
+ #前台cli命令
+ print(sys.argv[0])
+ if sys.argv[0] == "tsg_diagnose":
+ g_log_level = syslog.LOG_INFO
+ syslog_enable = 0
+ #后台自动轮询命令
+ else:
+ g_log_level = syslog.LOG_WARNING
+ syslog_enable = 1
+
+ #syslog init
+ if syslog_enable != 0:
+ syslog_handle = syslog.openlog(g_local_sled_name)
+
+ return 0
+
+#cli 命令不影响syslog, 只是输出各种消息, 即便有warning, error, 自动轮询脚本也会执行检测到
+#后台自动轮询命令增加 syslog-effect, 表示影响syslog, cli默认不加这个参数
+def tsg_common_diagnose():
+ tsg_common_diagnose_init()
+
+
+ #检查app进程是否存在, 是否最近n分钟内重启过
+ tsg_diagnose_for_app()
+
+ #检查CPU占用率
+ tsg_diagnose_for_cpu()
+
+ #检查mem占用率
+ tsg_diagnose_for_mem()
+
+ #检查磁盘占用率
+ tsg_diagnose_for_disk()
+
+ #检查物理网络情况
+ tsg_diagnose_for_interface()
+
+ #检查应用流量
+ tsg_diagnose_for_app_stream()
+
+
+if __name__ == '__main__':
+ tsg_common_diagnose()
print(ptable) \ No newline at end of file
diff --git a/py_common/common_logger.py b/py_common/common_logger.py
index e6e8f25..fcb5392 100644
--- a/py_common/common_logger.py
+++ b/py_common/common_logger.py
@@ -1,6 +1,17 @@
# coding: utf-8
import logging
+#syslog ����:
+#define KERN_EMERG "<0>" /* system is unusable */
+#define KERN_ALERT "<1>" /* action must be taken immediately */
+#define KERN_CRIT "<2>" /* critical conditions */
+#define KERN_ERR "<3>" /* error conditions */
+#define KERN_WARNING "<4>" /* warning conditions */
+#define KERN_NOTICE "<5>" /* normal but significant condition */
+#define KERN_INFO "<6>" /* informational */
+#define KERN_DEBUG "<7>" /* debug-level messages */
+
+G_SYS_LOG_STRING = ['EMERG', 'ALERT', 'CRIT', 'ERR', 'WARNING', 'NOTICE', 'INFO', 'DEBUG']
def logger_init(log_level):
logger = logging.getLogger("logger")
diff --git a/py_common/common_modules_deploy.py b/py_common/common_modules_deploy.py
index 301fae5..66e05a2 100644
--- a/py_common/common_modules_deploy.py
+++ b/py_common/common_modules_deploy.py
@@ -29,7 +29,7 @@ from common_modules_deploy import *
G_MODULE_DEPLOY_JSON = "/opt/tsg/etc/tsg_module_deploy.json"
#返回当前板卡运行的所有模块, 数组形式
-def tsg_get_local_sled_modules(sled_name):
+def tsg_get_local_sled_modules(arg_sled_name):
ret, err_msg, json_dict = tsg_json_parse(G_MODULE_DEPLOY_JSON)
if ret != 0:
return {}
@@ -38,11 +38,19 @@ def tsg_get_local_sled_modules(sled_name):
if len(module_list) <= 0:
return {}
- return module_list[sled_name]
+ for sled_name in module_list:
+ if sled_name == arg_sled_name:
+ return module_list[arg_sled_name]
+
+ return {}
if __name__ == '__main__':
global logger
logger = logger_init(10)
- module_list = tsg_get_local_sled_modules("mcn0")
- print(module_list) \ No newline at end of file
+ sled_name = "mcnx"
+ module_list = tsg_get_local_sled_modules(sled_name)
+ if len(module_list) > 0:
+ print("sled %s run module %s" %(sled_name, module_list))
+ else:
+ print("can't get sled %s run module!") \ No newline at end of file
diff --git a/py_common/common_modules_operator.py b/py_common/common_modules_operator.py
index 5d6d1b1..f7ede7d 100644
--- a/py_common/common_modules_operator.py
+++ b/py_common/common_modules_operator.py
@@ -6,7 +6,7 @@ import subprocess
import time
import re
import logging
-import logging.handlers
+#from logging import handlers
from common_system_cmd import *
from common_logger import *
from common_json import *
@@ -63,4 +63,4 @@ if __name__ == '__main__':
global logger
logger = logger_init(10)
module_operator = tsg_get_module_opertor("kni")
- print(module_operator) \ No newline at end of file
+ print("module kni operator: %s" %(module_operator)) \ No newline at end of file
diff --git a/py_common/common_system_cmd.py b/py_common/common_system_cmd.py
index 047fa40..9733a3d 100644
--- a/py_common/common_system_cmd.py
+++ b/py_common/common_system_cmd.py
@@ -1,6 +1,8 @@
#coding=utf-8
import os
import sys
+import re
+import subprocess
#return exitcode value + output message:
# 0: succ
@@ -18,11 +20,12 @@ def system_cmd_run(cmd_str):
try:
exitcode, output = subprocess.getstatusoutput(cmd_str)
except Exception as e:
- print(e)
- print("###### %s" %(e.message))
#if exitcode != 0:
# output = ""
- return 1, e.message
+ return 1, e
return exitcode, output
- \ No newline at end of file
+
+if __name__ == '__main__':
+ ret, output = system_cmd_run("ls")
+ print(ret, output) \ No newline at end of file
diff --git a/py_common/common_whoami.py b/py_common/common_whoami.py
index 786ef2a..3f29a1b 100644
--- a/py_common/common_whoami.py
+++ b/py_common/common_whoami.py
@@ -21,7 +21,7 @@ G_CHASSIS_IP_JSON = "/opt/tsg/etc/tsg_chassis_ip.json"
# type, id, name
#例如"mcn", 1, "mcn1"
def tsg_whoami():
- ret, iplist = tsg_sys_cmd_run("hostname -I")
+ ret, iplist = system_cmd_run("hostname -I")
if ret != 0:
return "", -1, ""
@@ -44,7 +44,7 @@ def tsg_whoami():
if ipaddr == sled['ip']:
return sled['type'], sled['id'], sled['name']
- logger.critical("local ip address can't match any item in json file %s!" %(G_CHASSIS_IP_JSON))
+ #logger.critical("local ip address can't match any item in json file %s!" %(G_CHASSIS_IP_JSON))
return "", -1, ""
if __name__ == '__main__':
diff --git a/py_test/nc_inserto_influxDB.sh b/py_test/nc_inserto_influxDB.sh
index 49f3ff2..eb356c6 100644
--- a/py_test/nc_inserto_influxDB.sh
+++ b/py_test/nc_inserto_influxDB.sh
@@ -16,4 +16,10 @@ echo "ttt,device=ens1f4,flow_type=mirror,sn=CBT2201925000001,node=mcn_3 PhyRXBit
echo "ttt,device=ens1f4,flow_type=mirror,sn=CBT2201925000002,node=mcn_3 PhyRXBits=1001i,PhyRXError=0i,PhyRXFrame=101i,PhyRXMissed=0i,PhyRXNoBUF=0i,PhyTXBits=801i,PhyTXError=0i,PhyTXFrame=201i,UsrRXDrops=0i,UsrTXDrops=0i" | nc -u 127.0.0.1 8126
-echo "ttt,device=ens1f4,flow_type=mirror,sn=CBT2201925000003,node=mcn_3 PhyRXBits=1001i,PhyRXError=0i,PhyRXFrame=101i,PhyRXMissed=0i,PhyRXNoBUF=0i,PhyTXBits=801i,PhyTXError=0i,PhyTXFrame=201i,UsrRXDrops=0i,UsrTXDrops=0i" | nc -u 127.0.0.1 8126 \ No newline at end of file
+echo "ttt,device=ens1f4,flow_type=mirror,sn=CBT2201925000003,node=mcn_3 PhyRXBits=1001i,PhyRXError=0i,PhyRXFrame=101i,PhyRXMissed=0i,PhyRXNoBUF=0i,PhyTXBits=801i,PhyTXError=0i,PhyTXFrame=201i,UsrRXDrops=0i,UsrTXDrops=0i" | nc -u 127.0.0.1 8126
+
+
+
+echo "intercept,sn=CBT2201925000001 kni_intcp_bits=1001i,kni_intcp_stm=10i,tfe_intcp_bits=1001i,tfe_intcp_stm=10i" | nc -u 127.0.0.1 8126
+echo "intercept,sn=CBT2201925000002 kni_intcp_bits=1001i,kni_intcp_stm=20i,tfe_intcp_bits=1001i,tfe_intcp_stm=20i" | nc -u 127.0.0.1 8126
+echo "intercept,sn=CBT2201925000003 kni_intcp_bits=2001i,kni_intcp_stm=35i,tfe_intcp_bits=1011i,tfe_intcp_stm=40i" | nc -u 127.0.0.1 8126 \ No newline at end of file
diff --git a/py_test/syslog_test.py b/py_test/syslog_test.py
new file mode 100644
index 0000000..6c56283
--- /dev/null
+++ b/py_test/syslog_test.py
@@ -0,0 +1,10 @@
+#coding=utf-8
+import os
+import sys
+import syslog
+
+
+if __name__ == '__main__':
+ log_handle = syslog.openlog("TSG-MCN0")
+ syslog.syslog(syslog.LOG_ERR, "[ERR][APP][STAT]app process not exit.")
+ syslog.syslog(syslog.LOG_ERR, "[NOTICE][CLI][CMD]call reboot.") \ No newline at end of file
diff --git a/py_tools/get_traffic_by_marsio.py b/py_tools/get_traffic_by_marsio.py
index 7dbc53f..f7dee21 100644
--- a/py_tools/get_traffic_by_marsio.py
+++ b/py_tools/get_traffic_by_marsio.py
@@ -110,7 +110,7 @@ def sendlog_by_socket(table_phydev, devsym):
def get_and_send_marsio_traffic(logger, json_fp, telegraf_client, devsym, arg_flow_type, arg_node_name):
__metric_dict_speed = {}
- metric_tag = {'device': devsym, 'flow_type':arg_flow_type, 'node':arg_node_name}
+ metric_tag = {'device': devsym, 'flow_type':arg_flow_type, 'sled':arg_node_name}
for item in TITLE_VECTOR:
value = phydev_speed_read(json_fp, devsym, TITLE_MAP[item])
diff --git a/py_tools/get_traffic_by_proc.py b/py_tools/get_traffic_by_proc.py
index ddaffd8..14dba5e 100644
--- a/py_tools/get_traffic_by_proc.py
+++ b/py_tools/get_traffic_by_proc.py
@@ -68,7 +68,7 @@ def get_traffic_from_proc(logger, device_name):
return packets_recv,bytes_recv,errin,dropin,packets_sent,bytes_sent,errout,dropout
def send_metrics_by_proc(logger, telegraf_client, dev_name, arg_flow_type, arg_node_name):
- metric_tag = {'device': dev_name, 'flow_type':arg_flow_type, 'node':arg_node_name}
+ metric_tag = {'device': dev_name, 'flow_type':arg_flow_type, 'sled':arg_node_name}
old_packets_recv,old_bytes_recv,old_errin,old_dropin,old_packets_sent,old_bytes_sent,old_errout,old_dropout = get_traffic_from_proc(logger,dev_name)
if len(old_packets_recv) <= 0:
diff --git a/py_tools/get_traffic_by_psutil.py b/py_tools/get_traffic_by_psutil.py
index 263414e..ba1c452 100644
--- a/py_tools/get_traffic_by_psutil.py
+++ b/py_tools/get_traffic_by_psutil.py
@@ -39,7 +39,7 @@ def get_stats_for_device(dev_name):
return packets_recv,bytes_recv,errin,dropin,packets_sent,bytes_sent,errout,dropout
def send_metrics_by_psutil(logger, telegraf_client, dev_name, arg_flow_type, arg_node_name):
- metric_tag = {'device': dev_name, 'flow_type':arg_flow_type, 'node':arg_node_name}
+ metric_tag = {'device': dev_name, 'flow_type':arg_flow_type, 'sled':arg_node_name}
old_packets_recv,old_bytes_recv,old_errin,old_dropin,old_packets_sent,old_bytes_sent,old_errout,old_dropout = get_stats_for_device(dev_name)
time.sleep(1)
diff --git a/py_tools/tsg_diagnose_background.py b/py_tools/tsg_diagnose_background.py
index bcdd037..c391ae8 100644
--- a/py_tools/tsg_diagnose_background.py
+++ b/py_tools/tsg_diagnose_background.py
@@ -6,6 +6,7 @@ import sys
import time
import json
import logging
+import syslog
from common_telegraf import *
from common_logger import *
from common_args import *
@@ -13,11 +14,6 @@ from common_logger import *
from common_influxdb import *
-
-tsg_
-
-
-
if __name__ == '__main__':
-
+ tsg_common_diagnose(syslog.LOG_WARNING)
diff --git a/py_tools/tsg_monit_intercept.py b/py_tools/tsg_monit_intercept.py
new file mode 100644
index 0000000..e7634d2
--- /dev/null
+++ b/py_tools/tsg_monit_intercept.py
@@ -0,0 +1,127 @@
+#coding=utf-8
+#本文件获取kni fs2日志, 抽取可拦截、已拦截计数, 存入influxDB
+import sys
+import time
+import re
+import subprocess
+from sys import path
+path.append(r'../py_common') #将存放module的路径添加进来
+path.append(r'./py_common') #将存放module的路径添加进来
+from common_get_tags import *
+from common_whoami import *
+from common_system_cmd import *
+from common_telegraf import *
+from common_args import *
+from common_logger import *
+from common_get_tags import *
+
+G_KNI_FS2_FILE = "/home/tsg/kni/fs2_kni.status"
+
+def find_expect_word_index(line_array, expect_word):
+ index = 0
+ for column in line_array:
+ if column == expect_word:
+ return index
+ else:
+ index += 1
+
+ return -1
+
+#根据fs2.log, 提取expect_word的sum和speed值
+#return value:
+#ret, sum, speed
+def get_sum_speed_from_fs2_matrix(filename, expect_word):
+ cmd_str = "cat %s | grep -A 2 %s" %(filename, expect_word)
+ ret, result = system_cmd_run(cmd_str)
+ if ret != 0:
+ print("no result for cmd: %s" %(cmd_str))
+ return 1, 0, 0
+
+ res = result.split('\n')
+ #print(res)
+
+ if len(res) != 3:
+ print("result lines is not 3!" %(res))
+ return 1, 0, 0
+
+ line = res[0].split()
+ index = find_expect_word_index(line, expect_word)
+ #后面的行有sum, speed, 多一列
+ index += 1
+
+ line = res[1].split()
+ sum = int(line[index])
+
+ line = res[2].split()
+ speed = int(line[index])
+
+ return 0, sum, speed
+
+def kni_intercept_init():
+ global telegraf_client
+
+ comm_arg_parser = setup_common_args()
+ arg_options = comm_arg_parser.parse_args()
+
+ telegraf_server_ip = arg_options.telegraf_ip
+ telegraf_server_port = int(arg_options.telegraf_port)
+ telegraf_tags = tsg_get_tags()
+
+ telegraf_client = telegraf_init(telegraf_server_ip, telegraf_server_port, telegraf_tags)
+
+ return 0
+
+def kni_fs2_stats():
+ metric_val = {}
+
+ key_word = "kni_intcp_bytes"
+ influxdb_field = "kni_intcp_bits"
+
+ ret, sum, speed = get_sum_speed_from_fs2_matrix(G_KNI_FS2_FILE, key_word)
+ if ret != 0:
+ print("get %s stat error" %(key_word))
+ sys.exit(1)
+ metric_val[influxdb_field] = speed
+
+ key_word = "tfe_intcp_bytes"
+ influxdb_field = "tfe_intcp_bits"
+
+ ret, sum, speed = get_sum_speed_from_fs2_matrix(G_KNI_FS2_FILE, key_word)
+ if ret != 0:
+ print("get %s stat error" %(key_word))
+ sys.exit(1)
+ metric_val[influxdb_field] = speed
+
+ key_word = "kni_intcp_stm"
+ influxdb_field = "kni_intcp_stm"
+
+ ret, sum, speed = get_sum_speed_from_fs2_matrix(G_KNI_FS2_FILE, key_word)
+ if ret != 0:
+ print("get %s stat error" %(key_word))
+ sys.exit(1)
+ metric_val[influxdb_field] = speed
+
+ key_word = "tfe_intcp_stm"
+ influxdb_field = "tfe_intcp_stm"
+
+ ret, sum, speed = get_sum_speed_from_fs2_matrix(G_KNI_FS2_FILE, key_word)
+ if ret != 0:
+ print("get %s stat error" %(key_word))
+ sys.exit(1)
+ metric_val[influxdb_field] = speed
+
+ #print(metric_val)
+ return metric_val
+
+
+if __name__ == '__main__':
+ kni_intercept_init()
+ metric_val = kni_fs2_stats()
+
+ telegraf_client.metric('intercept', metric_val, tags = {})
+
+
+
+
+
+ \ No newline at end of file
diff --git a/py_tools/tsg_monit_interface.py b/py_tools/tsg_monit_interface.py
index 62ccfbe..1c0c039 100644
--- a/py_tools/tsg_monit_interface.py
+++ b/py_tools/tsg_monit_interface.py
@@ -1,4 +1,4 @@
-# coding: utf-8
+#coding=utf-8
import sys
import psutil
@@ -9,15 +9,18 @@ import logging
from get_traffic_by_psutil import *
from get_traffic_by_marsio import *
from get_traffic_by_proc import *
+from sys import path
+path.append(r'../py_common') #将存放module的路径添加进来
+path.append(r'./py_common') #将存放module的路径添加进来
from common_telegraf import *
from common_logger import *
from common_args import *
from common_logger import *
from common_get_tags import *
+from common_whoami import *
INTERFACE_JSON_PATH = '/opt/tsg/etc/tsg_chassis_interface.json'
-
#return value:
# 0, error msg, json_dict : succ
# 1, error msg, "" : error
@@ -33,15 +36,6 @@ def tsg_json_parse(file_name):
return 1, e , ""
-def get_local_node():
- ret, msg, json_dict = tsg_json_parse(INTERFACE_JSON_PATH)
-
- if ret == 0:
- return json_dict['local_chassis_node']
- else:
- logger.critical("%s!" %(msg))
- sys.exit(1)
-
def get_interface_list():
ret, msg, json_dict = tsg_json_parse(INTERFACE_JSON_PATH)
@@ -66,7 +60,7 @@ def get_interface_list():
# call function in get_traffic_by_psutil.py
#send_metrics_by_psutil(logger, telegraf_client, dev['dev_name'], dev['flow_type'], node_name)
- #Ҳ��������ԭʼ�İ취, ����cat ����/proc/net/dev
+ #也可以用最原始的办法, 连续cat 两次/proc/net/dev
send_metrics_by_proc(logger, telegraf_client, dev['dev_name'], dev['flow_type'], node_name)
else:
logger.critical("not support driver type %s for: %s" %(dev['dev_type'], dev['dev_name']))
@@ -92,6 +86,6 @@ if __name__ == '__main__':
logger.info("not found telegraf tags.")
telegraf_client = telegraf_init(telegraf_server_ip, telegraf_server_port, telegraf_tags)
- node_name = get_local_node()
+ type, id, node_name = tsg_whoami()
get_interface_list() \ No newline at end of file
diff --git a/py_tools/tsg_monit_stream.py b/py_tools/tsg_monit_stream.py
index 5cf3b50..ae75590 100644
--- a/py_tools/tsg_monit_stream.py
+++ b/py_tools/tsg_monit_stream.py
@@ -10,18 +10,22 @@ import telegraf
import socket
from get_traffic_by_psutil import *
from get_traffic_by_marsio import *
+
+from sys import path
+path.append(r'../py_common') #将存放module的路径添加进来
+path.append(r'./py_common') #将存放module的路径添加进来
from common_telegraf import *
from common_logger import *
from common_args import *
from common_logger import *
from common_get_tags import *
+from common_whoami import *
TBPS = (1 * 1000 * 1000 * 1000 * 1000)
GBPS = (1 * 1000 * 1000 * 1000)
MBPS = (1 * 1000 * 1000)
KBPS = (1 * 1000)
-INTERFACE_JSON_PATH = '/opt/tsg/etc/tsg_chassis_interface.json'
G_JSON_PATH = '/var/run/mrzcpd/mrmonit.daemon'
G_APP_JSON_PATH = '/var/run/mrzcpd/mrmonit.app.%s'
@@ -242,7 +246,7 @@ def dump_apm_sendlog(json_fp, telegraf_client, appsym, user_interface, title_vec
sendlog_dict_speed = {}
#sendlog_dict_value = {}
- sendlog_tag = {'appname': appsym, 'device': dev, 'node' : node_name}
+ sendlog_tag = {'appname': appsym, 'device': dev, 'sled' : node_name}
for id, value in enumerate(title_vector_rx + title_vector_tx):
sendlog_dict_speed[value] = int(ValueListSumSpeed[id])
@@ -302,8 +306,7 @@ def app_setup_argv_parser(applist):
parser = setup_common_args()
#add monit_stream custom args
- parser.add_argument('app', metavar='APP', help = 'the name of slave application', nargs = '*',
- default=applist)
+ parser.add_argument('app', metavar='APP', help = 'the name of slave application', nargs = '*', default=applist)
parser.add_argument('-i', '--interface', help = 'the name of network interface',
action = 'append')
parser.add_argument('-m', '--metrics', help = 'group of metrics', choices=['rx','tx','ftx'],
@@ -373,22 +376,14 @@ def get_and_send_app_traffic():
print(("%s, perhaps program is not running.") % str(err))
return 0
-
-def get_local_node():
- try:
- with open(INTERFACE_JSON_PATH) as json_fp:
- json_dict = json.load(json_fp)
- return json_dict['local_chassis_node']
- except IOError:
- return ""
+
if __name__ == '__main__':
global node_name
global telegraf_client
global logger
- comm_arg_parser = setup_common_args()
- arg_options = comm_arg_parser.parse_args()
+ arg_options = setup_common_args().parse_args()
logger = logger_init(arg_options.log_level)
@@ -400,6 +395,7 @@ if __name__ == '__main__':
logger.info("not found telegraf tags.")
telegraf_client = telegraf_init(telegraf_server_ip, telegraf_server_port, telegraf_tags)
- node_name = get_local_node()
+
+ type, id, node_name = tsg_whoami()
get_and_send_app_traffic() \ No newline at end of file
diff --git a/py_tools/tsg_upadte_config.py b/py_tools/tsg_upadte_config.py
new file mode 100644
index 0000000..8b12fee
--- /dev/null
+++ b/py_tools/tsg_upadte_config.py
@@ -0,0 +1,7 @@
+#coding=utf-8
+#需要自动更新的信息,
+#1.用户自定义tags, 从consul获取, 存入/opt/tsg/etc/tsg_tags.json
+#2.本机的唯一sn, 初始化存于/opt/tsg/etc/tsg_sn.json,
+# 需要更新到telegraf.conf,
+#3.tfe与kni的交互网卡, 配置文件在:/etc/sysconfig/tfe-env-config --> TFE_DEVICE_DATA_INCOMING,
+# 读到此网卡名称后, 需要更新 /opt/tsg/etc/tsg_chassis_interface.json, 流量类型为intercomm \ No newline at end of file
diff --git a/service_script/kni_service_scipt b/service_script/kni_service_scipt
new file mode 100644
index 0000000..9f1ab75
--- /dev/null
+++ b/service_script/kni_service_scipt
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+
+function start()
+{
+ # Require Step, if failure, all step should be stop.
+
+ cd /home/tsg/kni;
+ `echo 'start 1' >> /tmp/tttt`
+ `/home/tsg/kni/r2 >> /tmp/tttt`
+ `echo 'start 2' >> /tmp/tttt`
+ res=0
+ if [ ! $? -eq 0 ]; then
+ return 1
+ fi
+
+ sleep 1
+
+ res=`ps -afx | grep sapp | grep -v grep` ;
+ if [ ! $? -eq 0 ]; then
+ return 1
+ fi
+
+ return 0
+}
+
+function stop()
+{
+ res=`killall -9 sapp`;
+ if [ ! $? -eq 0 ]; then
+ return 1
+ fi
+
+ return 0
+}
+
+function restart()
+{
+ stop
+ start $*
+}
+
+action=$1
+shift
+
+case $action in
+ start)
+ start $*
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart $*
+ ;;
+ *)
+ echo "Usage: service $0 {start|stop|restart}"
+ exit 1
+esac
+
+exit $?
diff --git a/service_script/tsgkni.service b/service_script/tsgkni.service
new file mode 100644
index 0000000..fadd0a5
--- /dev/null
+++ b/service_script/tsgkni.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=tsg kni module
+Requires=mrtunnat.service
+After=mrtunnat.service
+
+[Service]
+WorkingDirectory=/home/tsg/kni
+#ExecStart=/home/tsg/kni/kni_service_scipt start
+ExecStart=/home/tsg/kni/sapp
+#ExecStop=/home/tsg/kni/kni_service_scipt stop
+#Type=forking
+Restart=always
+RestartSec=5s
+
+[Install]
+WantedBy=multi-user.target