From e062e2e53d81e1860c88107cf0246dd7da2bdb81 Mon Sep 17 00:00:00 2001 From: zzz833708 <498605991@qq.com> Date: Fri, 3 Jan 2025 18:15:06 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E3=80=90=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=91=E8=A1=A5=E5=85=85cmdb=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20#1010158081121426827?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bklog/apps/log_databus/constants.py | 26 ++++++++++++++++++++ bklog/apps/log_databus/handlers/collector.py | 9 +++++++ 2 files changed, 35 insertions(+) diff --git a/bklog/apps/log_databus/constants.py b/bklog/apps/log_databus/constants.py index a6febff36d..5de2f9ce5a 100644 --- a/bklog/apps/log_databus/constants.py +++ b/bklog/apps/log_databus/constants.py @@ -46,6 +46,32 @@ DEFAULT_RETENTION = 14 +# 节点管理支持的cmdb变量 +CC_HOST_FIELDS = [ + "bk_host_id", + "bk_agent_id", + "bk_cloud_id", + "bk_addressing", + "bk_host_innerip", + "bk_host_outerip", + "bk_host_innerip_v6", + "bk_host_outerip_v6", + "bk_host_name", + "bk_os_type", + "bk_os_name", + "bk_os_bit", + "bk_os_version", + "bk_cpu_module", + "operator", + "bk_bak_operator", + "bk_isp_name", + "bk_biz_id", + "bk_province_name", + "bk_state", + "bk_state_name", + "bk_supplier_account", + "bk_cpu_architecture", +] class VisibleEnum(ChoicesEnum): # 当前业务可见 diff --git a/bklog/apps/log_databus/handlers/collector.py b/bklog/apps/log_databus/handlers/collector.py index 391d680ee8..bb9670c0e6 100644 --- a/bklog/apps/log_databus/handlers/collector.py +++ b/bklog/apps/log_databus/handlers/collector.py @@ -83,6 +83,7 @@ TargetNodeTypeEnum, TopoType, WorkLoadType, + CC_HOST_FIELDS, ) from apps.log_databus.exceptions import ( AllNamespaceNotAllowedException, @@ -841,6 +842,14 @@ def update_or_create(self, params: dict) -> dict: is_display = params.get("is_display", True) params["params"]["encoding"] = data_encoding params["params"]["run_task"] = params.get("run_task", True) + + # cmdb元数据补充 + extra_labels = params["params"].get("extra_labels") + if extra_labels: + for item in extra_labels: + if item["key"] in CC_HOST_FIELDS: + item["value"] = "{{cmdb_instance.host." + item["key"] + "}}" + # 1. 创建CollectorConfig记录 model_fields = { "collector_config_name": collector_config_name, From 778353b594dd5b7171f83c88e38e5e1feca49811 Mon Sep 17 00:00:00 2001 From: zzz833708 <498605991@qq.com> Date: Thu, 9 Jan 2025 15:24:11 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E3=80=90=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=91=E8=A1=A5=E5=85=85cmdb=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20#1010158081121426827?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bklog/apps/log_databus/handlers/collector.py | 14 ++++++++++++++ bklog/apps/log_databus/views/collector_views.py | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/bklog/apps/log_databus/handlers/collector.py b/bklog/apps/log_databus/handlers/collector.py index 59d5a42773..0338e52fad 100644 --- a/bklog/apps/log_databus/handlers/collector.py +++ b/bklog/apps/log_databus/handlers/collector.py @@ -4847,6 +4847,20 @@ def send_create_notify(cls, collector_config: CollectorConfig): NOTIFY_EVENT(content=content, dimensions={"space_uid": space_uid, "msg_type": "create_collector_config"}) + @staticmethod + def search_object_attribute(): + return_data = defaultdict(list) + response = CCApi.search_object_attribute() + for data in response: + if data["bk_obj_id"] == "host" and data["bk_property_id"] in CC_HOST_FIELDS: + cmdb_data = { + "field": data["bk_property_id"], + "name": data["bk_property_name"], + "group_name": data["bk_property_group_name"] + } + return_data["host"].append(cmdb_data) + return return_data + def get_data_link_id(bk_biz_id: int, data_link_id: int = 0) -> int: """ diff --git a/bklog/apps/log_databus/views/collector_views.py b/bklog/apps/log_databus/views/collector_views.py index d7a3e0a05e..636683286e 100644 --- a/bklog/apps/log_databus/views/collector_views.py +++ b/bklog/apps/log_databus/views/collector_views.py @@ -106,7 +106,7 @@ def get_permissions(self): if auth_info["bk_app_code"] in settings.ESQUERY_WHITE_LIST: return [] - if self.action in ["list_scenarios", "batch_subscription_status"]: + if self.action in ["list_scenarios", "batch_subscription_status", "search_object_attribute"]: return [] if self.action in ["create", "only_create", "custom_create"]: return [BusinessActionPermission([ActionEnum.CREATE_COLLECTION])] @@ -2440,3 +2440,7 @@ def report_token(self, request, collector_config_id=None): @list_route(methods=["GET"], url_path="report_host") def report_host(self, request): return Response(CollectorHandler().get_report_host()) + + @list_route(methods=["GET"], url_path="search_object_attribute") + def search_object_attribute(self, request): + return Response(CollectorHandler.search_object_attribute()) From b198a9fd0a91c70d69dc092460bd9ba214934196 Mon Sep 17 00:00:00 2001 From: zzz833708 <498605991@qq.com> Date: Mon, 13 Jan 2025 17:59:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E3=80=90=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=91=E8=A1=A5=E5=85=85cmdb=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20#1010158081121426827?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bklog/apps/log_databus/constants.py | 13 ++++++++++- bklog/apps/log_databus/handlers/collector.py | 24 ++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/bklog/apps/log_databus/constants.py b/bklog/apps/log_databus/constants.py index 5de2f9ce5a..c25f439577 100644 --- a/bklog/apps/log_databus/constants.py +++ b/bklog/apps/log_databus/constants.py @@ -46,7 +46,7 @@ DEFAULT_RETENTION = 14 -# 节点管理支持的cmdb变量 +# 节点管理支持的cmdb 主机信息 CC_HOST_FIELDS = [ "bk_host_id", "bk_agent_id", @@ -73,6 +73,17 @@ "bk_cpu_architecture", ] +# 节点管理支持的cmdb 集群信息 +CC_SCOPE_FIELDS = ["bk_obj_id", "bk_inst_id"] + + +class CmdbFieldType(ChoicesEnum): + HOST = "host" + SCOPE = "scope" + + _choices_labels = ((HOST, _("主机")), (SCOPE, _("集群"))) + + class VisibleEnum(ChoicesEnum): # 当前业务可见 CURRENT_BIZ = "current_biz" diff --git a/bklog/apps/log_databus/handlers/collector.py b/bklog/apps/log_databus/handlers/collector.py index 18d0f70614..5a07892225 100644 --- a/bklog/apps/log_databus/handlers/collector.py +++ b/bklog/apps/log_databus/handlers/collector.py @@ -84,6 +84,8 @@ TopoType, WorkLoadType, CC_HOST_FIELDS, + CC_SCOPE_FIELDS, + CmdbFieldType, ) from apps.log_databus.exceptions import ( AllNamespaceNotAllowedException, @@ -855,8 +857,10 @@ def update_or_create(self, params: dict) -> dict: extra_labels = params["params"].get("extra_labels") if extra_labels: for item in extra_labels: - if item["key"] in CC_HOST_FIELDS: - item["value"] = "{{cmdb_instance.host." + item["key"] + "}}" + if item["value"] == CmdbFieldType.HOST.value and item["key"] in CC_HOST_FIELDS: + item["value"] = "{{cmdb_instance." + item["value"] + "." + item["key"] + "}}" + if item["value"] == CmdbFieldType.SCOPE.value and item["key"] in CC_SCOPE_FIELDS: + item["value"] = "{{cmdb_instance." + item["value"] + "[0]." + item["key"] + "}}" # 1. 创建CollectorConfig记录 model_fields = { @@ -4856,15 +4860,25 @@ def send_create_notify(cls, collector_config: CollectorConfig): @staticmethod def search_object_attribute(): return_data = defaultdict(list) - response = CCApi.search_object_attribute() + response = CCApi.search_object_attribute({"bk_obj_id": "host"}) for data in response: if data["bk_obj_id"] == "host" and data["bk_property_id"] in CC_HOST_FIELDS: - cmdb_data = { + host_data = { "field": data["bk_property_id"], "name": data["bk_property_name"], "group_name": data["bk_property_group_name"] } - return_data["host"].append(cmdb_data) + return_data["host"].append(host_data) + return_data["host"].extend([ + {"field": "bk_supplier_account", "name": "供应商", "group_name": "基础信息"}, + {"field": "bk_host_id", "name": "主机ID", "group_name": "基础信息"}, + {"field": "bk_biz_id", "name": "业务ID", "group_name": "基础信息"} + ]) + scope_data = [ + {"field": "bk_obj_id", "name": "模型ID", "group_name": "基础信息"}, + {"field": "bk_inst_id", "name": "集群ID", "group_name": "基础信息"} + ] + return_data["scope"] = scope_data return return_data