searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

cdn业务诊断工具

2024-11-18 09:21:51
3
0

方案基本思路:在面临大量的相似、复杂链路海量数据的排查过程中,需要申请大量的机器权限,并且很多好的排查经验积累没办法很好的沉淀及项目分享。本发明旨在通过统一的平台串联工具的方式实现安全的、可复用高效诊断实现,从而服务于运营人员快速响应、解决业务问题。

 

本方案由四个模块组成:

1、web服务:用于代理服务器信息留存、脚本录入、任务触发和结果展示;

2、任务分配工具:辅助web服务进行任务分配;

3、任务代理工具:串业务主体,将脚本地理到对应业务服务器进行执行,并且将业务数据串联;

4、任务执行工具:安装于全网服务器中,每个单一业务的最终执行主体。

方案主要涉及六个主要过程:

1、任务录入:运营人员和脚本提供人员可以在平台中录入相应的脚本及对应入参;

2、任务分配:负责对代理服务器任务的协调;

3、任务获取:代理服务器定时向web服务器拉取待执行任务;

4、任务执行:任务执行分为串联路执行和业务服务器执行具体脚本。

5、结果上报:代理服务器将各个业务服务器的执行结果串联之后,输出最终结论返回web服务器;

6、结果展示:web服务器对结果进行结构话展示。

过程详细介绍:

1、web任务录入:

web应用页面提供相应的脚本参数录入页面,最终形成参数的格式,如表12所示,

{

    "task":[#任务数组

        {

            "busi_group_id":"1",#业务组id,用于区分不同业务

            "task_id":"89",#任务id

            "time_out":"23s",#超时间

            "retry":5,#重试次数

            "param":[#执行参数

                {

                    "name":"xxx",#参数名称

                    "value":"xxx"#参数值

                }

            ],

            "script_content":"xxx",#脚本内容

            "script_type":"shell"#脚本类型,目前支持python和shell两种

        }

    ]

}

1 web应用执行脚本数据格式

 

一般使用过程中,如果是相对独立的业务,则仅需要通过运行执行脚本,运营人员需要对业务进行诊断时,可以选择自己录入的任务或者同组成员分享的脚本,暨提供了脚本保存及复用功能。

 执行参数

执行环境

获取方式

shell

$param

python

os.getenv(param)

 

执行脚本:

根据脚本类型,入录相关类型脚本即可,此处通过提供agentcmd $ip’ ‘$cmd指令可将需要再远程机器上执行的cmd指令无感知的在代理服务中运行。

{

    "last_update": 1679020805,#最后更新时间

    "is_change": true,#是否变化

    "data": [#数组脚本内容

        {

            "name": "hello",#公共脚本名称

            "busi_group_id": 2,#业务组id,用于区分不同业务

            "chmod": "555",#脚本权限

            "script_type": "shell",#脚本类型

            "script_text": "xxxx"#脚本内容

        }

    ]

}

2 web应用公共脚本数据格式

公共脚本在同一业务的代理服务器中 当有业务需要同时请求某个或者某些第三方接口时,可以通过公共脚本进行维护,公共脚本在代理服务器上为长期存在,则需要进行权限限制,如涉及敏感数据,只需要让使用方关注到入参及出参,则设置为 111权限。

 

 

脚本类型

引入方式

shell

source /usr/local/diagnose_agent/{id}/common/{name}.sh

python

import sys

sys.path.append('./common')

sys.path.append('/usr/local/diagnose_agent/{id}/common')

公共脚本的引用方式:

2、任务分配:

任务代理工具根据所代理业务特性被分为不同的组别,每个业务类型根据可以设定对应的分配频率,并行任务上限,超过任务上限任务派发策略,最终决策出各个代理工具下次需要执行的任务,定义数据格式如表3所示:

{

    "type1":{# 业务类型

        "timerInterval":15, #定时任务执行频率

        "taskLimit":10,# 并行任务数

        "outOfLimitTacticsType":"discard",#超过并行任务数执行策略,快速失败或者等待

        "heartbeatLimit":60 # 心跳时间,超过对应时间没有上报心跳则任务不可用

    },

    "type2":{

        "timerInterval":15,

        "taskLimit":15,

        "outOfLimitTacticsType":"wait",

        "heartbeatLimit":60

    }

}

3 代理服务器任务策略格式

3、任务获取:

代理服务器,定时跟web服务器反馈心跳信息,同时web服务器返回对应任务分配结果。

4、任务执行:

代理服务器获取到待执行任务后,根据任务定义的脚本、脚本类型、超时时间开启对应的虚拟环境进行运行,当出现解析、请求、文件获取、网络波动等情况超时,根据用户定义的重试次数进行可多次执行。其中代理服务器通过识别脚本中agentcmd $ip’ ‘$cmd指令获取对应远程机器执行cmd命令后执行结果。

5、结果上报:

代理服务器执行完对应任务后,通过web提供的接口resultReport,进行结果反馈,如表4所示:

{

  "task_id": "1", # 任务id

  "agent_name": "cdn-xxx", # 代理服务器名称

  "cost": "12.23s",#本次执行耗时

  "script_path": "/var/diagnose_agent/scripts/2023-04-28/7_65.sh", #本次执行脚本及日志

  "status": 0,# 直接结果状态

  "start_time": "2023-04-28 14:14:23",#开始执行时间

  "output": "xxxx" # 执行结果,可为markdown格式

}

4 代理服务器反馈结果数据格式

 

6、结果展示:

为了方便运营人员阅读诊断执行结果,web应用提供了markdown格式展示功能,此部分web平台也进行了相应的markdown语法预置,脚本录入方也可自定义结果的输出格式化为自定的markdown格式,如表5所示:

<details open>

<summary> 场景执行情况</summary>

 

+

|入口对象 | 场景对象 | 场景名称 | 场景描述 | 检测项目 | 检测状态 | 错误信息 | 根因标识 | 恢复建议 | 备注 |

|---|---|---|---|---|---|---|---|---|---|

| xx-xxx | xx-xxx | eck_cluster | xx集群诊断 | 创建安全组 | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建nat | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建虚机 | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建xx | ]正常 | | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 初始化k8s组件_xxx任务[ping] | ]异常 | 执行失败,执行时间是:2023-03-28 20:10:45  | |

</details>

 

0条评论
0 / 1000
蚊子也怕冷
5文章数
0粉丝数
蚊子也怕冷
5 文章 | 0 粉丝
蚊子也怕冷
5文章数
0粉丝数
蚊子也怕冷
5 文章 | 0 粉丝
原创

cdn业务诊断工具

2024-11-18 09:21:51
3
0

方案基本思路:在面临大量的相似、复杂链路海量数据的排查过程中,需要申请大量的机器权限,并且很多好的排查经验积累没办法很好的沉淀及项目分享。本发明旨在通过统一的平台串联工具的方式实现安全的、可复用高效诊断实现,从而服务于运营人员快速响应、解决业务问题。

 

本方案由四个模块组成:

1、web服务:用于代理服务器信息留存、脚本录入、任务触发和结果展示;

2、任务分配工具:辅助web服务进行任务分配;

3、任务代理工具:串业务主体,将脚本地理到对应业务服务器进行执行,并且将业务数据串联;

4、任务执行工具:安装于全网服务器中,每个单一业务的最终执行主体。

方案主要涉及六个主要过程:

1、任务录入:运营人员和脚本提供人员可以在平台中录入相应的脚本及对应入参;

2、任务分配:负责对代理服务器任务的协调;

3、任务获取:代理服务器定时向web服务器拉取待执行任务;

4、任务执行:任务执行分为串联路执行和业务服务器执行具体脚本。

5、结果上报:代理服务器将各个业务服务器的执行结果串联之后,输出最终结论返回web服务器;

6、结果展示:web服务器对结果进行结构话展示。

过程详细介绍:

1、web任务录入:

web应用页面提供相应的脚本参数录入页面,最终形成参数的格式,如表12所示,

{

    "task":[#任务数组

        {

            "busi_group_id":"1",#业务组id,用于区分不同业务

            "task_id":"89",#任务id

            "time_out":"23s",#超时间

            "retry":5,#重试次数

            "param":[#执行参数

                {

                    "name":"xxx",#参数名称

                    "value":"xxx"#参数值

                }

            ],

            "script_content":"xxx",#脚本内容

            "script_type":"shell"#脚本类型,目前支持python和shell两种

        }

    ]

}

1 web应用执行脚本数据格式

 

一般使用过程中,如果是相对独立的业务,则仅需要通过运行执行脚本,运营人员需要对业务进行诊断时,可以选择自己录入的任务或者同组成员分享的脚本,暨提供了脚本保存及复用功能。

 执行参数

执行环境

获取方式

shell

$param

python

os.getenv(param)

 

执行脚本:

根据脚本类型,入录相关类型脚本即可,此处通过提供agentcmd $ip’ ‘$cmd指令可将需要再远程机器上执行的cmd指令无感知的在代理服务中运行。

{

    "last_update": 1679020805,#最后更新时间

    "is_change": true,#是否变化

    "data": [#数组脚本内容

        {

            "name": "hello",#公共脚本名称

            "busi_group_id": 2,#业务组id,用于区分不同业务

            "chmod": "555",#脚本权限

            "script_type": "shell",#脚本类型

            "script_text": "xxxx"#脚本内容

        }

    ]

}

2 web应用公共脚本数据格式

公共脚本在同一业务的代理服务器中 当有业务需要同时请求某个或者某些第三方接口时,可以通过公共脚本进行维护,公共脚本在代理服务器上为长期存在,则需要进行权限限制,如涉及敏感数据,只需要让使用方关注到入参及出参,则设置为 111权限。

 

 

脚本类型

引入方式

shell

source /usr/local/diagnose_agent/{id}/common/{name}.sh

python

import sys

sys.path.append('./common')

sys.path.append('/usr/local/diagnose_agent/{id}/common')

公共脚本的引用方式:

2、任务分配:

任务代理工具根据所代理业务特性被分为不同的组别,每个业务类型根据可以设定对应的分配频率,并行任务上限,超过任务上限任务派发策略,最终决策出各个代理工具下次需要执行的任务,定义数据格式如表3所示:

{

    "type1":{# 业务类型

        "timerInterval":15, #定时任务执行频率

        "taskLimit":10,# 并行任务数

        "outOfLimitTacticsType":"discard",#超过并行任务数执行策略,快速失败或者等待

        "heartbeatLimit":60 # 心跳时间,超过对应时间没有上报心跳则任务不可用

    },

    "type2":{

        "timerInterval":15,

        "taskLimit":15,

        "outOfLimitTacticsType":"wait",

        "heartbeatLimit":60

    }

}

3 代理服务器任务策略格式

3、任务获取:

代理服务器,定时跟web服务器反馈心跳信息,同时web服务器返回对应任务分配结果。

4、任务执行:

代理服务器获取到待执行任务后,根据任务定义的脚本、脚本类型、超时时间开启对应的虚拟环境进行运行,当出现解析、请求、文件获取、网络波动等情况超时,根据用户定义的重试次数进行可多次执行。其中代理服务器通过识别脚本中agentcmd $ip’ ‘$cmd指令获取对应远程机器执行cmd命令后执行结果。

5、结果上报:

代理服务器执行完对应任务后,通过web提供的接口resultReport,进行结果反馈,如表4所示:

{

  "task_id": "1", # 任务id

  "agent_name": "cdn-xxx", # 代理服务器名称

  "cost": "12.23s",#本次执行耗时

  "script_path": "/var/diagnose_agent/scripts/2023-04-28/7_65.sh", #本次执行脚本及日志

  "status": 0,# 直接结果状态

  "start_time": "2023-04-28 14:14:23",#开始执行时间

  "output": "xxxx" # 执行结果,可为markdown格式

}

4 代理服务器反馈结果数据格式

 

6、结果展示:

为了方便运营人员阅读诊断执行结果,web应用提供了markdown格式展示功能,此部分web平台也进行了相应的markdown语法预置,脚本录入方也可自定义结果的输出格式化为自定的markdown格式,如表5所示:

<details open>

<summary> 场景执行情况</summary>

 

+

|入口对象 | 场景对象 | 场景名称 | 场景描述 | 检测项目 | 检测状态 | 错误信息 | 根因标识 | 恢复建议 | 备注 |

|---|---|---|---|---|---|---|---|---|---|

| xx-xxx | xx-xxx | eck_cluster | xx集群诊断 | 创建安全组 | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建nat | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建虚机 | ]正常| | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 创建xx | ]正常 | | | | |

| xx-xxx | xx-xxx | xx_cluster | xx集群诊断 | 初始化k8s组件_xxx任务[ping] | ]异常 | 执行失败,执行时间是:2023-03-28 20:10:45  | |

</details>

 

文章来自个人专栏
方案
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0