From c2ebb4af0146a825ced4926f0c7ea70d4c7a857b Mon Sep 17 00:00:00 2001 From: yoonsuihn Date: Thu, 11 Jun 2026 11:13:47 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20mc-cost-optimizer=20docker-compose?= =?UTF-8?q?=20=EB=B0=8F=20=ED=99=98=EA=B2=BD=EC=84=A4=EC=A0=95=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ncp-vm-rightsizer 블록 YAML 들여쓰기 수정 (6→4칸) - cost-optimizer 환경변수 prefix를 CO_로 통일 - .env.setup의 잘못된 cron 값 및 URL 오타 수정 - cost-optimizer init DDL 업데이트 --- conf/docker/.env.setup | 107 ++++--- .../init/01_init_cost_db_ddl.sql | 132 ++++---- conf/docker/docker-compose.yaml | 301 ++++++++++-------- 3 files changed, 284 insertions(+), 256 deletions(-) diff --git a/conf/docker/.env.setup b/conf/docker/.env.setup index 2b21a84..b3f5b5d 100644 --- a/conf/docker/.env.setup +++ b/conf/docker/.env.setup @@ -31,6 +31,7 @@ MC_COST_OPTIMIZER_ALARM_PORT=9000 MC_COST_OPTIMIZER_ASSET_COLLECTOR_PORT=8091 MC_COST_OPTIMIZER_AZURE_COLLECTOR_PORT=18093 MC_COST_OPTIMIZER_NCP_COLLECTOR_PORT=18094 +MC_COST_OPTIMIZER_GCP_COLLECTOR_PORT=28095 MC_COST_OPTIMIZER_AZURE_RIGHTSIZER_PORT=18092 MC_COST_OPTIMIZER_NCP_RIGHTSIZER_PORT=18095 MC_COST_OPTIMIZER_DB_HOST_PORT=3307 @@ -171,66 +172,74 @@ MC_DATA_MANAGER_PUBLIC_HOST=https://${MC_IAM_MANAGER_PUBLIC_DOMAIN}:${MC_DATA_MA MC_APPLICATION_MANAGER_PROXY_PORT=18084 MC_APPLICATION_MANAGER_PUBLIC_HOST=https://${MC_IAM_MANAGER_PUBLIC_DOMAIN}:${MC_APPLICATION_MANAGER_PROXY_PORT} - # MC-COST-OPTIMIZER -MC_COST_OPTIMIZER_COST_DB_NAME=cost -MC_COST_OPTIMIZER_SLACK_DB_NAME=slack_test -MC_COST_OPTIMIZER_MAIL_DB_NAME=mailing - -MC_COST_OPTIMIZER_MYSQL_ROOT_PASSWORD=0000 -MC_COST_OPTIMIZER_MYSQL_USER=mcmpcostopti -MC_COST_OPTIMIZER_MYSQL_PASSWORD=0000 - -MC_COST_OPTIMIZER_COST_DB_URL_NEW=jdbc:mysql://mc-cost-optimizer-db:3306/${MC_COST_OPTIMIZER_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true -MC_COST_OPTIMIZER_COST_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${MC_COST_OPTIMIZER_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 -MC_COST_OPTIMIZER_SLACK_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${MC_COST_OPTIMIZER_SLACK_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 -MC_COST_OPTIMIZER_MAIL_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${MC_COST_OPTIMIZER_MAIL_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 - -MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL=http://mc-cost-optimizer-asset-collector:8091 -MC_COST_OPTIMIZER_COST_COLLECTOR_URL=http://mc-cost-optimizer-cost-collector:8081 -MC_COST_OPTIMIZER_COST_PROCESSOR_URL=http://mc-cost-optimizer-cost-processor:8082 +CO_COST_DB_NAME=cost +CO_SLACK_DB_NAME=slack_test +CO_MAIL_DB_NAME=mailing + +CO_MYSQL_ROOT_PASSWORD=0000 +CO_MYSQL_USER=mcmpcostopti +CO_MYSQL_PASSWORD=0000 + +CO_COST_DB_URL_NEW=jdbc:mysql://mc-cost-optimizer-db:3306/${CO_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true +CO_COST_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${CO_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 +CO_SLACK_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${CO_SLACK_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 +CO_MAIL_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${CO_MAIL_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 + +CO_COST_ASSET_COLLECTOR_URL=http://mc-cost-optimizer-asset-collector:8091 +CO_COST_COLLECTOR_URL=http://mc-cost-optimizer-cost-collector:8081 +CO_COST_PROCESSOR_URL=http://mc-cost-optimizer-cost-processor:8082 + +CO_COST_GCP_COLLECTOR_URL=http://mc-cost-optimizer-cost-gcp-collector:8095 +CO_GCP_PROJECT_ID=gcp-projectid +CO_GCP_CLIENT_EMAIL=gcp-clientemail +CO_GCP_PRIVATE_KEY_ID=gcp-privatekeyid +CO_GCP_PRIVATE_KEY=gcp-privatekey +CO_GCP_BQ_DATASET=gcp-datasetname +CO_GCP_BQ_TABLE=gcp-bigguerytable +CO_GCP_BATCH_CRON_SCHEDULE=0 0 8 * * ? ## Cost Collector -MC_COST_OPTIMIZER_COST_COLLECT_UNUSED_CRON_SCHEDULE=0 30 0,6 * * ? -MC_COST_OPTIMIZER_COST_COLLECT_CUR_CRON_SCHEDULE=0 0 0,6 * * ? -MC_COST_OPTIMIZER_AWS_CUR_EXPORT_NAME=mcmp-costopti -MC_COST_OPTIMIZER_AWS_CUR_EXPORT_PATH_PREFIX=mcmp-costopti -MC_COST_OPTIMIZER_AWS_ACCESS_KEY_ID=accesskey -MC_COST_OPTIMIZER_AWS_SECRET_ACCESS_KEY=secretkey +CO_COST_COLLECT_UNUSED_CRON_SCHEDULE=0 30 0,6 * * ? +CO_COST_COLLECT_CUR_CRON_SCHEDULE=0 0 0,6 * * ? +CO_AWS_CUR_EXPORT_NAME=mcmp-costopti +CO_AWS_CUR_EXPORT_PATH_PREFIX=mcmp-costopti +CO_AWS_ACCESS_KEY_ID=aws-accesskey +CO_AWS_SECRET_ACCESS_KEY=aws-secretaccesskey ## Cost Processor -MC_COST_OPTIMIZER_COST_PROCESS_UNUSED_CRON_SCHEDULE=0 45 * * * ? -MC_COST_OPTIMIZER_COST_PROCESS_ABNORMAL_CRON_SCHEDULE=0 0 1,7 * * ? -MC_COST_OPTIMIZER_COST_SELECTOR_URL=http://mc-cost-optimizer-cost-selector:8083 -MC_COST_OPTIMIZER_ALARM_URL=http://mc-cost-optimizer-alarm-service:9000 +CO_COST_PROCESS_UNUSED_CRON_SCHEDULE=0 45 * * * ? +CO_COST_PROCESS_ABNORMAL_CRON_SCHEDULE=0 0 1,7 * * ? +CO_COST_SELECTOR_URL=http://mc-cost-optimizer-cost-selector:8083 +CO_ALARM_URL=http://mc-cost-optimizer-alarm-service:9000 ## Asset Controller -MC_COST_OPTIMIZER_API_URL=http://mc-cost-optimizer-be:9090 -MC_COST_OPTIMIZER_ASSET_MONITORING_SERVER=http://mc-observability-manager:18080 -MC_COST_OPTIMIZER_ASSET_COLLECT_BATCH_CRON_SCHEDULE=0 10 * * * ? +CO_API_URL=http://mc-cost-optimizer-be:9090 +CO_ASSET_MONITORING_SERVER=http://mc-observability-manager:18080 +CO_ASSET_COLLECT_BATCH_CRON_SCHEDULE=0 10 * * * ? ## Cost-Azure-Collector -MC_COST_OPTIMIZER_COST_AZURE_COLLECTOR_URL=http://mc-cost-optimizer-cost-azure-collector:8093 -MC_COST_OPTIMIZER_AZURE_TENANT_ID=tenantid -MC_COST_OPTIMIZER_AZURE_CLIENT_ID=clientid -MC_COST_OPTIMIZER_AZURE_CLIENT_SECRET=clientsecret -MC_COST_OPTIMIZER_AZURE_SUBSCRIPTION_ID=subscriptionid -MC_COST_OPTIMIZER_AZURE_SERVICE_BATCH_CRON_SCHEDULE=0 0 0 * * ? -MC_COST_OPTIMIZER_AZURE_VM_BATCH_CRON_SCHEDULE=0 10 0 * * ? -MC_COST_OPTIMIZER_AZURE_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? +CO_COST_AZURE_COLLECTOR_URL=http://mc-cost-optimizer-cost-azure-collector:8093 +CO_AZURE_TENANT_ID=azure-tenantid +CO_AZURE_CLIENT_ID=azure-clientid +CO_AZURE_CLIENT_SECRET=azure-clientsecret +CO_AZURE_SUBSCRIPTION_ID=azure-subscriptionid +CO_AZURE_SERVICE_BATCH_CRON_SCHEDULE=0 0 0 * * ? +CO_AZURE_VM_BATCH_CRON_SCHEDULE=0 10 0 * * ? +CO_AZURE_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? ## Cost-NCP-Collector -MC_COST_OPTIMIZER_COST_NCP_COLLECTOR_URL=http://mc-cost-optimizer-cost-ncp-collector:8094 -MC_COST_OPTIMIZER_NCP_IAM_ACCESS_KEY=iamaccesskey -MC_COST_OPTIMIZER_NCP_IAM_SECRET_KEY=iamsecretkey -MC_COST_OPTIMIZER_NCP_SERVICE_BATCH_CRON_SCHEDULE=0 0 0 * * ? -MC_COST_OPTIMIZER_NCP_VM_BATCH_CRON_SCHEDULE=0 10 0 * * ? -MC_COST_OPTIMIZER_NCP_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? - -## Tumblebug credentials -MC_COST_OPTIMIZER_TUMBLEBUG_USERNAME=spider -MC_COST_OPTIMIZER_TUMBLEBUG_PASSWORD=spider - +CO_COST_NCP_COLLECTOR_URL=http://mc-cost-optimizer-cost-ncp-collector:8094 +CO_NCP_IAM_ACCESS_KEY=ncp-iamaccesskey +CO_NCP_IAM_SECRET_KEY=ncp-iamsecretkey +CO_NCP_SERVICE_BATCH_CRON_SCHEDULE=0 0 0 * * ? +CO_NCP_VM_BATCH_CRON_SCHEDULE=0 10 0 * * ? +CO_NCP_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? + +#Tumblebug +CO_TBB_URL=http://mc-infra-manager:1323/tumblebug +CO_TBB_USERNAME=default +CO_TBB_PW=default # MC-APPLICATION-MANAGER MC_APPLICATION_MANAGER_POSTGRES_DB=appmgr diff --git a/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql b/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql index 09e767f..391b132 100644 --- a/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql +++ b/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql @@ -356,84 +356,6 @@ CREATE TABLE `budget_monthly` ( UNIQUE KEY `uq_csp_year_month_project` (`csp`,`year`,`month`,`project_cd`) ) ENGINE=InnoDB AUTO_INCREMENT=384 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci; -CREATE TABLE TASM_AZR_RSRC_OPT_MODN_L -( - PREV_GENTH VARCHAR(50) NOT NULL COMMENT 'Previous Generation', - NEW_GENTH VARCHAR(50) NULL COMMENT 'Current Generation', - RSRC_TYPE VARCHAR(100) NOT NULL COMMENT 'Resource Type', - RGN_ID VARCHAR(50) NOT NULL COMMENT 'Region', - INST_FAMILY VARCHAR(50) NULL COMMENT 'Instance Family', - PRIMARY KEY (RSRC_TYPE, RGN_ID, PREV_GENTH) -) - CHARSET = utf8mb3; - -create index TASM_AZR_RSRC_OPT_MODN_L_IDX_01 ON TASM_AZR_RSRC_OPT_MODN_L (PREV_GENTH); - -CREATE TABLE TASM_AZR_VM_PRICING_L -( - SKU VARCHAR(150) NOT NULL, - REGION VARCHAR(50) NOT NULL, - INSTANCE_TYPE VARCHAR(50) NULL, - CORES DOUBLE NULL, - RAM DOUBLE NULL, - SERIES VARCHAR(50) NULL, - OS VARCHAR(50) NULL, - PER_HOUR DOUBLE NULL, - PER_HOUR_ONE_YEAR_RESERVED DOUBLE NULL, - PER_HOUR_THREE_YEAR_RESERVED DOUBLE NULL, - PER_HOUR_SPOT DOUBLE NULL, - IS_VCPU VARCHAR(50) NULL, - AVAILABLE_FOR_ML VARCHAR(50) NULL, - IS_HIDDEN VARCHAR(50) NULL, - DISK_SIZE DOUBLE NULL, - GPU VARCHAR(50) NULL, - PRICING_TYPES VARCHAR(50) NULL, - CREA_DT DATETIME NULL COMMENT '생성일시', - PRIMARY KEY (SKU, REGION) -); - -CREATE INDEX IX_TASM_AZR_VM_PRICING_L_02 - ON TASM_AZR_VM_PRICING_L (REGION, INSTANCE_TYPE, OS, PRICING_TYPES); - -create table TASM_CLOUD_RGN_M -( - CLOUD_VNDR_ID VARCHAR(50) NOT NULL COMMENT 'CLOUD VENDOR ID', - RGN_ID VARCHAR(50) NOT NULL COMMENT 'REGION ID', - RGN_NM VARCHAR(100) NOT NULL COMMENT 'REGION 명', - RGN_CODE VARCHAR(100) NULL, - UNIT_PRICE_RGN VARCHAR(100) NULL, - MT_RGN_NM VARCHAR(100) NULL COMMENT 'REGION 명 (METERING)', - SVC_TYPE VARCHAR(10) NOT NULL COMMENT 'SERVICE TYPE( GLOBAL, CHINA)', - USE_YN VARCHAR(1) DEFAULT 'Y' NOT NULL COMMENT 'CLOUD 사용 여부 (''N'':사용안함, ''Y'':사용)', - CREA_DT DATETIME NOT NULL COMMENT '생성일시', - CREA_ID VARCHAR(50) NOT NULL COMMENT '생성자 ID', - CREA_IPADDR VARCHAR(39) NOT NULL COMMENT '생성자 IP주소', - UPDT_DT DATETIME NULL COMMENT '수정일시', - UPDT_ID VARCHAR(50) NULL COMMENT '수정자 ID', - UPDT_IPADDR VARCHAR(39) NULL COMMENT '수정자 IP주소', - PRIMARY KEY (CLOUD_VNDR_ID, RGN_ID) -) - COMMENT 'Cloud Region Informations' CHARSET = utf8mb3; - -create table TASM_NCP_INSTANCE_PRICING_L -( - SKU varchar(150) not null, - REGION varchar(50) not null, - INSTANCE_TYPE varchar(50) null, - SERIES varchar(50) null, - PRODUCT_NAME varchar(150) null, - PRODUCT_CODE varchar(100) null, - CORES double null, - MEMORY double null, - DISK_SIZE double null, - GPU double null, - UNIT_CODE varchar(50) not null, - UNIT_CODE_NAME varchar(150) not null, - USD double null, - CREA_DT datetime null comment '생성일시', - primary key (SKU, REGION, UNIT_CODE) -); - -- Azure/NCP용 Unused Daily Mart 테이블 CREATE TABLE `unused_daily_mart` ( `create_dt` timestamp NOT NULL COMMENT '생성일시 (배치 실행 시점)', @@ -449,3 +371,57 @@ CREATE TABLE `unused_daily_mart` ( COMMENT='Azure/NCP Unused 자원 분석용 일별 메트릭 마트'; +CREATE TABLE IF NOT EXISTS `gcp_billing_raw` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', + `created` datetime DEFAULT NULL COMMENT '수집 시각', + `billing_account_id` varchar(255) DEFAULT NULL COMMENT '청구 계정 ID', + `cost` double DEFAULT NULL COMMENT '발생 비용', + `cost_type` varchar(50) DEFAULT NULL COMMENT '비용 타입 (regular, tax, adjustment, rounding_error)', + `currency` varchar(10) DEFAULT NULL COMMENT '통화 코드 (KRW, USD)', + `currency_conversion_rate` double DEFAULT NULL COMMENT '환율', + `export_time` datetime DEFAULT NULL COMMENT '데이터 추출 시각', + `invoice_month` varchar(6) DEFAULT NULL COMMENT '청구월 (YYYYMM)', + `service_id` varchar(255) DEFAULT NULL COMMENT '서비스 고유 ID', + `service_description` varchar(255) DEFAULT NULL COMMENT '서비스 명칭', + `sku_id` varchar(255) DEFAULT NULL COMMENT 'SKU 고유 ID', + `sku_description` varchar(512) DEFAULT NULL COMMENT 'SKU 상세 명칭', + `project_id` varchar(255) DEFAULT NULL COMMENT '프로젝트 ID', + `project_number` varchar(255) DEFAULT NULL COMMENT '프로젝트 번호', + `project_name` varchar(255) DEFAULT NULL COMMENT '프로젝트 명칭', + `project_ancestry_numbers` varchar(512) DEFAULT NULL COMMENT '상위 조직 경로', + `location` varchar(255) DEFAULT NULL COMMENT '상세 위치', + `location_country` varchar(10) DEFAULT NULL COMMENT '국가 코드', + `location_region` varchar(255) DEFAULT NULL COMMENT '리전', + `location_zone` varchar(255) DEFAULT NULL COMMENT '존', + `usage_start_time` datetime DEFAULT NULL COMMENT '사용 시작 시각', + `usage_end_time` datetime DEFAULT NULL COMMENT '사용 종료 시각', + `usage_amount` double DEFAULT NULL COMMENT '사용량', + `usage_unit` varchar(50) DEFAULT NULL COMMENT '사용량 단위', + `usage_amount_in_pricing_units` double DEFAULT NULL COMMENT '과금 단위 기준 수량', + `usage_pricing_unit` varchar(50) DEFAULT NULL COMMENT '과금 단위', + `adjustment_info_id` varchar(255) DEFAULT NULL COMMENT '조정 ID', + `adjustment_info_description` varchar(512) DEFAULT NULL COMMENT '조정 설명', + `adjustment_info_mode` varchar(50) DEFAULT NULL COMMENT '조정 모드', + `adjustment_info_type` varchar(50) DEFAULT NULL COMMENT '조정 타입', + `labels` text DEFAULT NULL COMMENT '라벨 (JSON)', + `system_labels` text DEFAULT NULL COMMENT '시스템 라벨 (JSON)', + `tags` text DEFAULT NULL COMMENT '태그 (JSON)', + PRIMARY KEY (`id`), + KEY `idx_billing_date` (`billing_account_id`,`invoice_month`), + KEY `idx_project_date` (`project_id`,`usage_start_time`), + KEY `idx_service` (`service_description`,`usage_start_time`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci COMMENT='GCP 빌링 원본 데이터'; + + +CREATE TABLE IF NOT EXISTS `provider_keys` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `ns_id` varchar(100) NOT NULL COMMENT 'namespace ID', + `provider` varchar(20) NOT NULL COMMENT 'openai | anthropic | google', + `enc_key` text NOT NULL COMMENT 'AES-256-GCM 암호문 (base64)', + `iv` varchar(100) NOT NULL COMMENT 'nonce 12바이트 (base64)', + `tag` varchar(100) NOT NULL COMMENT 'GCM 인증 태그 16바이트 (base64)', + `created_at` timestamp DEFAULT current_timestamp(), + `updated_at` timestamp DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`id`), + UNIQUE KEY `uq_ns_provider` (`ns_id`, `provider`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci COMMENT='LLM 프로바이더 API 키 (AES-256-GCM 암호화 저장)'; diff --git a/conf/docker/docker-compose.yaml b/conf/docker/docker-compose.yaml index 976d150..5216b4d 100644 --- a/conf/docker/docker-compose.yaml +++ b/conf/docker/docker-compose.yaml @@ -398,7 +398,7 @@ services: mc-cost-optimizer-fe: restart: unless-stopped container_name: mc-cost-optimizer-fe - image: cloudbaristaorg/mc-costopti-ui:0.5.2 + image: cloudbaristaorg/mc-costopti-ui:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -415,7 +415,7 @@ services: mc-cost-optimizer-be: restart: on-failure container_name: mc-cost-optimizer-be - image: cloudbaristaorg/mc-costopti-api:0.5.2 + image: cloudbaristaorg/mc-costopti-api:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -426,17 +426,17 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.cost.optimize.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL_NEW} - spring.datasource.hikari.cost.optimize.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.cost.optimize.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - tumblebug.url: http://mc-infra-manager:1323/tumblebug - tumblebug.username: ${MC_COST_OPTIMIZER_TUMBLEBUG_USERNAME:-spider} - tumblebug.password: ${MC_COST_OPTIMIZER_TUMBLEBUG_PASSWORD:-spider} - costopti.alarmservice.url: ${MC_COST_OPTIMIZER_ALARM_URL} - costopti.assetcollector.url: ${MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL} - costopti.costcollector.url: ${MC_COST_OPTIMIZER_COST_COLLECTOR_URL} - costopti.costprocessor.url: ${MC_COST_OPTIMIZER_COST_PROCESSOR_URL} - costopti.costselector.url: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} + spring.datasource.hikari.cost.optimize.jdbc-url: ${CO_COST_DB_URL_NEW} + spring.datasource.hikari.cost.optimize.username: ${CO_MYSQL_USER} + spring.datasource.hikari.cost.optimize.password: ${CO_MYSQL_PASSWORD} + tumblebug.url: ${CO_TBB_URL} + tumblebug.username: ${CO_TBB_USERNAME:-default} + tumblebug.password: ${CO_TBB_PW:-default} + costopti.alarmservice.url: ${CO_ALARM_URL} + costopti.assetcollector.url: ${CO_COST_ASSET_COLLECTOR_URL} + costopti.costcollector.url: ${CO_COST_COLLECTOR_URL} + costopti.costprocessor.url: ${CO_COST_PROCESSOR_URL} + costopti.costselector.url: ${CO_COST_SELECTOR_URL} healthcheck: test: [ "CMD", "/app/tool/mcc", "rest", "get", "http://localhost:9090/api/costopti/be/readyz" ] <<: *default-health-check @@ -444,7 +444,7 @@ services: mc-cost-optimizer-cost-collector: restart: on-failure container_name: mc-cost-optimizer-cost-collector - image: cloudbaristaorg/mc-costopti-costcollector:0.5.2 + image: cloudbaristaorg/mc-costopti-costcollector:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -459,20 +459,20 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.batch.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL} - spring.datasource.hikari.batch.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.batch.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - unusedBatchCronSchedule: ${MC_COST_OPTIMIZER_COST_COLLECT_UNUSED_CRON_SCHEDULE} - curBatchCronSchedule: ${MC_COST_OPTIMIZER_COST_COLLECT_CUR_CRON_SCHEDULE} - aws.data.export.name: ${MC_COST_OPTIMIZER_AWS_CUR_EXPORT_NAME} - aws.data.export.path.prefix: ${MC_COST_OPTIMIZER_AWS_CUR_EXPORT_PATH_PREFIX} - AWS_ACCESS_KEY_ID: ${MC_COST_OPTIMIZER_AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY: ${MC_COST_OPTIMIZER_AWS_SECRET_ACCESS_KEY} + spring.datasource.hikari.batch.jdbc-url: ${CO_COST_DB_URL} + spring.datasource.hikari.batch.username: ${CO_MYSQL_USER} + spring.datasource.hikari.batch.password: ${CO_MYSQL_PASSWORD} + unusedBatchCronSchedule: ${CO_COST_COLLECT_UNUSED_CRON_SCHEDULE} + curBatchCronSchedule: ${CO_COST_COLLECT_CUR_CRON_SCHEDULE} + aws.data.export.name: ${CO_AWS_CUR_EXPORT_NAME} + aws.data.export.path.prefix: ${CO_AWS_CUR_EXPORT_PATH_PREFIX} + AWS_ACCESS_KEY_ID: ${CO_AWS_ACCESS_KEY_ID} + AWS_SECRET_ACCESS_KEY: ${CO_AWS_SECRET_ACCESS_KEY} mc-cost-optimizer-cost-processor: restart: on-failure container_name: mc-cost-optimizer-cost-processor - image: cloudbaristaorg/mc-costopti-costprocessor:0.5.2 + image: cloudbaristaorg/mc-costopti-costprocessor:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -487,18 +487,18 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.batch.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL} - spring.datasource.hikari.batch.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.batch.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - unusedProcessCronSchedule: ${MC_COST_OPTIMIZER_COST_PROCESS_UNUSED_CRON_SCHEDULE} - abnormalProcessCronSchedule: ${MC_COST_OPTIMIZER_COST_PROCESS_ABNORMAL_CRON_SCHEDULE} - cost.selector.url: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} - opti.alarm.url: ${MC_COST_OPTIMIZER_ALARM_URL} + spring.datasource.hikari.batch.jdbc-url: ${CO_COST_DB_URL} + spring.datasource.hikari.batch.username: ${CO_MYSQL_USER} + spring.datasource.hikari.batch.password: ${CO_MYSQL_PASSWORD} + unusedProcessCronSchedule: ${CO_COST_PROCESS_UNUSED_CRON_SCHEDULE} + abnormalProcessCronSchedule: ${CO_COST_PROCESS_ABNORMAL_CRON_SCHEDULE} + cost.selector.url: ${CO_COST_SELECTOR_URL} + opti.alarm.url: ${CO_ALARM_URL} mc-cost-optimizer-cost-selector: restart: on-failure container_name: mc-cost-optimizer-cost-selector - image: cloudbaristaorg/mc-costopti-costselector:0.5.2 + image: cloudbaristaorg/mc-costopti-costselector:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -513,15 +513,18 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.cost.optimize.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL} - spring.datasource.hikari.cost.optimize.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.cost.optimize.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - opti.alarm.url: ${MC_COST_OPTIMIZER_ALARM_URL} + spring.datasource.hikari.cost.optimize.jdbc-url: ${CO_COST_DB_URL} + spring.datasource.hikari.cost.optimize.username: ${CO_MYSQL_USER} + spring.datasource.hikari.cost.optimize.password: ${CO_MYSQL_PASSWORD} + opti.alarm.url: ${CO_ALARM_URL} + tumblebug.url: ${CO_TBB_URL} + tumblebug.username: ${CO_TBB_USERNAME} + tumblebug.password: ${CO_TBB_PW} mc-cost-optimizer-alarm-service: restart: on-failure container_name: mc-cost-optimizer-alarm-service - image: cloudbaristaorg/mc-costopti-alarm:0.5.2 + image: cloudbaristaorg/mc-costopti-alarm:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -532,20 +535,20 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.slack.jdbc-url: ${MC_COST_OPTIMIZER_SLACK_DB_URL} - spring.datasource.hikari.slack.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.slack.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - spring.datasource.hikari.mailing.jdbc-url: ${MC_COST_OPTIMIZER_MAIL_DB_URL} - spring.datasource.hikari.mailing.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.mailing.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - spring.datasource.hikari.history.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL} - spring.datasource.hikari.history.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.history.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} + spring.datasource.hikari.slack.jdbc-url: ${CO_SLACK_DB_URL} + spring.datasource.hikari.slack.username: ${CO_MYSQL_USER} + spring.datasource.hikari.slack.password: ${CO_MYSQL_PASSWORD} + spring.datasource.hikari.mailing.jdbc-url: ${CO_MAIL_DB_URL} + spring.datasource.hikari.mailing.username: ${CO_MYSQL_USER} + spring.datasource.hikari.mailing.password: ${CO_MYSQL_PASSWORD} + spring.datasource.hikari.history.jdbc-url: ${CO_COST_DB_URL} + spring.datasource.hikari.history.username: ${CO_MYSQL_USER} + spring.datasource.hikari.history.password: ${CO_MYSQL_PASSWORD} mc-cost-optimizer-asset-collector: restart: on-failure container_name: mc-cost-optimizer-asset-collector - image: cloudbaristaorg/mc-costopti-assetcollector:0.5.2 + image: cloudbaristaorg/mc-costopti-assetcollector:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -560,17 +563,17 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - spring.datasource.hikari.batch.jdbc-url: ${MC_COST_OPTIMIZER_COST_DB_URL} - spring.datasource.hikari.batch.username: ${MC_COST_OPTIMIZER_MYSQL_USER} - spring.datasource.hikari.batch.password: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - costopti.be.url: ${MC_COST_OPTIMIZER_API_URL} - asset.collect.url: ${MC_COST_OPTIMIZER_ASSET_MONITORING_SERVER} - assetCollectBatchCronSchedule: ${MC_COST_OPTIMIZER_ASSET_COLLECT_BATCH_CRON_SCHEDULE} + spring.datasource.hikari.batch.jdbc-url: ${CO_COST_DB_URL} + spring.datasource.hikari.batch.username: ${CO_MYSQL_USER} + spring.datasource.hikari.batch.password: ${CO_MYSQL_PASSWORD} + costopti.be.url: ${CO_API_URL} + asset.collect.url: ${CO_ASSET_MONITORING_SERVER} + assetCollectBatchCronSchedule: ${CO_ASSET_COLLECT_BATCH_CRON_SCHEDULE} mc-cost-optimizer-cost-azure-collector: restart: on-failure container_name: mc-cost-optimizer-cost-azure-collector - image: cloudbaristaorg/mc-costopti-azure-collector:0.5.2 + image: cloudbaristaorg/mc-costopti-azure-collector:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -585,28 +588,65 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - SPRING_DATASOURCE_URL: ${MC_COST_OPTIMIZER_COST_DB_URL} - SPRING_DATASOURCE_USERNAME: ${MC_COST_OPTIMIZER_MYSQL_USER} - SPRING_DATASOURCE_PASSWORD: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} + SPRING_DATASOURCE_URL: ${CO_COST_DB_URL} + SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} + SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} - AZURE_CREDENTIAL_TENANT_ID: ${MC_COST_OPTIMIZER_AZURE_TENANT_ID} - AZURE_CREDENTIAL_CLIENT_ID: ${MC_COST_OPTIMIZER_AZURE_CLIENT_ID} - AZURE_CREDENTIAL_CLIENT_SECRET: ${MC_COST_OPTIMIZER_AZURE_CLIENT_SECRET} - AZURE_CREDENTIAL_SUBSCRIPTION_ID: ${MC_COST_OPTIMIZER_AZURE_SUBSCRIPTION_ID} + AZURE_CREDENTIAL_TENANT_ID: ${CO_AZURE_TENANT_ID} + AZURE_CREDENTIAL_CLIENT_ID: ${CO_AZURE_CLIENT_ID} + AZURE_CREDENTIAL_CLIENT_SECRET: ${CO_AZURE_CLIENT_SECRET} + AZURE_CREDENTIAL_SUBSCRIPTION_ID: ${CO_AZURE_SUBSCRIPTION_ID} - AZURE_SERVICE_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_AZURE_SERVICE_BATCH_CRON_SCHEDULE} - AZURE_VM_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_AZURE_VM_BATCH_CRON_SCHEDULE} + AZURE_SERVICE_BATCH_CRON_SCHEDULE: ${CO_AZURE_SERVICE_BATCH_CRON_SCHEDULE} + AZURE_VM_BATCH_CRON_SCHEDULE: ${CO_AZURE_VM_BATCH_CRON_SCHEDULE} + + COSTOPTI_ALARMSERVICE_URL: ${CO_ALARM_URL} + COSTOPTI_ASSETCOLLECTOR_URL: ${CO_COST_ASSET_COLLECTOR_URL} + COSTOPTI_COSTCOLLECTOR_URL: ${CO_COST_COLLECTOR_URL} + COSTOPTI_COSTPROCESSOR_URL: ${CO_COST_PROCESSOR_URL} + COSTOPTI_COSTSELECTOR_URL: ${CO_COST_SELECTOR_URL} + + mc-cost-optimizer-gcp-collector: + restart: on-failure + container_name: mc-cost-optimizer-gcp-collector + image: cloudbaristaorg/mc-costopti-gcpcollector:0.5.4 + networks: + - mc-cost-optimizer-network + - mc-observability-network + - mc-infra-manager-network + - mc-web-console-network + ports: + - target: 8095 + published: ${MC_COST_OPTIMIZER_GCP_COLLECTOR_PORT} + protocol: tcp + depends_on: + - mc-cost-optimizer-db + volumes: + - ./tool/mcc:/app/tool/mcc + environment: + + spring.datasource.url: ${CO_COST_DB_URL} + spring.datasource.username: ${CO_MYSQL_USER} + spring.datasource.password: ${CO_MYSQL_PASSWORD} + + gcp.project-id: ${CO_GCP_PROJECT_ID} + gcp.client-email: ${CO_GCP_CLIENT_EMAIL} + gcp.private-key: ${CO_GCP_PRIVATE_KEY} + gcp.private-key-id: ${CO_GCP_PRIVATE_KEY_ID} + gcp.dataset: ${CO_GCP_BQ_DATASET} + gcp.table: ${CO_GCP_BQ_TABLE} + gcpBillingCronSchedule: ${CO_GCP_BATCH_CRON_SCHEDULE} + costopti.alarmservice.url: ${CO_ALARM_URL} + + tumblebug.url: ${CO_TBB_URL} + tumblebug.username: ${CO_TBB_USERNAME} + tumblebug.password: ${CO_TBB_PW} - COSTOPTI_ALARMSERVICE_URL: ${MC_COST_OPTIMIZER_ALARM_URL} - COSTOPTI_ASSETCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL} - COSTOPTI_COSTCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_COLLECTOR_URL} - COSTOPTI_COSTPROCESSOR_URL: ${MC_COST_OPTIMIZER_COST_PROCESSOR_URL} - COSTOPTI_COSTSELECTOR_URL: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} mc-cost-optimizer-cost-ncp-collector: restart: on-failure container_name: mc-cost-optimizer-cost-ncp-collector - image: cloudbaristaorg/mc-costopti-ncp-collector:0.5.2 + image: cloudbaristaorg/mc-costopti-ncp-collector:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -621,21 +661,21 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - SPRING_DATASOURCE_URL: ${MC_COST_OPTIMIZER_COST_DB_URL} - SPRING_DATASOURCE_USERNAME: ${MC_COST_OPTIMIZER_MYSQL_USER} - SPRING_DATASOURCE_PASSWORD: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} + SPRING_DATASOURCE_URL: ${CO_COST_DB_URL} + SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} + SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} - NCP_CREDENTIAL_IAM_ACCESS_KEY: ${MC_COST_OPTIMIZER_NCP_IAM_ACCESS_KEY} - NCP_CREDENTIAL_IAM_SECRET_KEY: ${MC_COST_OPTIMIZER_NCP_IAM_SECRET_KEY} + NCP_CREDENTIAL_IAM_ACCESS_KEY: ${CO_NCP_IAM_ACCESS_KEY} + NCP_CREDENTIAL_IAM_SECRET_KEY: ${CO_NCP_IAM_SECRET_KEY} - NCP_SERVICE_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_NCP_SERVICE_BATCH_CRON_SCHEDULE} - NCP_VM_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_NCP_VM_BATCH_CRON_SCHEDULE} + NCP_SERVICE_BATCH_CRON_SCHEDULE: ${CO_NCP_SERVICE_BATCH_CRON_SCHEDULE} + NCP_VM_BATCH_CRON_SCHEDULE: ${CO_NCP_VM_BATCH_CRON_SCHEDULE} - COSTOPTI_ALARMSERVICE_URL: ${MC_COST_OPTIMIZER_ALARM_URL} - COSTOPTI_ASSETCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL} - COSTOPTI_COSTCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_COLLECTOR_URL} - COSTOPTI_COSTPROCESSOR_URL: ${MC_COST_OPTIMIZER_COST_PROCESSOR_URL} - COSTOPTI_COSTSELECTOR_URL: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} + COSTOPTI_ALARMSERVICE_URL: ${CO_ALARM_URL} + COSTOPTI_ASSETCOLLECTOR_URL: ${CO_COST_ASSET_COLLECTOR_URL} + COSTOPTI_COSTCOLLECTOR_URL: ${CO_COST_COLLECTOR_URL} + COSTOPTI_COSTPROCESSOR_URL: ${CO_COST_PROCESSOR_URL} + COSTOPTI_COSTSELECTOR_URL: ${CO_COST_SELECTOR_URL} ##timezone setting TZ: Asia/Seoul @@ -643,7 +683,7 @@ services: mc-cost-optimizer-azure-vm-rightsizer: restart: on-failure container_name: mc-cost-optimizer-azure-vm-rightsizer - image: cloudbaristaorg/mc-costopti-azure-vm-rightsizer:0.5.2 + image: cloudbaristaorg/mc-costopti-azure-vm-rightsizer:0.5.4 networks: - mc-cost-optimizer-network - mc-observability-network @@ -658,56 +698,59 @@ services: volumes: - ./tool/mcc:/app/tool/mcc environment: - SPRING_DATASOURCE_URL: ${MC_COST_OPTIMIZER_COST_DB_URL} - SPRING_DATASOURCE_USERNAME: ${MC_COST_OPTIMIZER_MYSQL_USER} - SPRING_DATASOURCE_PASSWORD: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} + SPRING_DATASOURCE_URL: ${CO_COST_DB_URL} + SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} + SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} - AZURE_CREDENTIAL_TENANT_ID: ${MC_COST_OPTIMIZER_AZURE_TENANT_ID} - AZURE_CREDENTIAL_CLIENT_ID: ${MC_COST_OPTIMIZER_AZURE_CLIENT_ID} - AZURE_CREDENTIAL_CLIENT_SECRET: ${MC_COST_OPTIMIZER_AZURE_CLIENT_SECRET} - AZURE_CREDENTIAL_SUBSCRIPTION_ID: ${MC_COST_OPTIMIZER_AZURE_SUBSCRIPTION_ID} + AZURE_CREDENTIAL_TENANT_ID: ${CO_AZURE_TENANT_ID} + AZURE_CREDENTIAL_CLIENT_ID: ${CO_AZURE_CLIENT_ID} + AZURE_CREDENTIAL_CLIENT_SECRET: ${CO_AZURE_CLIENT_SECRET} + AZURE_CREDENTIAL_SUBSCRIPTION_ID: ${CO_AZURE_SUBSCRIPTION_ID} - AZURE_RIGHTSIZER_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_AZURE_VM_RIGHTSIZER_SCHEDULE} + AZURE_RIGHTSIZER_BATCH_CRON_SCHEDULE: ${CO_AZURE_VM_RIGHTSIZER_SCHEDULE} - COSTOPTI_ALARMSERVICE_URL: ${MC_COST_OPTIMIZER_ALARM_URL} - COSTOPTI_ASSETCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL} - COSTOPTI_COSTCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_COLLECTOR_URL} - COSTOPTI_COSTPROCESSOR_URL: ${MC_COST_OPTIMIZER_COST_PROCESSOR_URL} - COSTOPTI_COSTSELECTOR_URL: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} + COSTOPTI_ALARMSERVICE_URL: ${CO_ALARM_URL} + COSTOPTI_ASSETCOLLECTOR_URL: ${CO_COST_ASSET_COLLECTOR_URL} + COSTOPTI_COSTCOLLECTOR_URL: ${CO_COST_COLLECTOR_URL} + COSTOPTI_COSTPROCESSOR_URL: ${CO_COST_PROCESSOR_URL} + COSTOPTI_COSTSELECTOR_URL: ${CO_COST_SELECTOR_URL} mc-cost-optimizer-ncp-vm-rightsizer: - restart: on-failure - container_name: mc-cost-optimizer-ncp-vm-rightsizer - image: cloudbaristaorg/mc-costopti-ncp-vm-rightsizer:0.5.2 - networks: - - mc-cost-optimizer-network - - mc-observability-network - - mc-infra-manager-network - - mc-web-console-network - ports: - - target: 8095 - published: ${MC_COST_OPTIMIZER_NCP_RIGHTSIZER_PORT} - protocol: tcp - depends_on: - - mc-cost-optimizer-db - volumes: - - ./tool/mcc:/app/tool/mcc - environment: - SPRING_DATASOURCE_URL: ${MC_COST_OPTIMIZER_COST_DB_URL} - SPRING_DATASOURCE_USERNAME: ${MC_COST_OPTIMIZER_MYSQL_USER} - SPRING_DATASOURCE_PASSWORD: ${MC_COST_OPTIMIZER_MYSQL_PASSWORD} - - NCP_CREDENTIAL_IAM_ACCESS_KEY: ${MC_COST_OPTIMIZER_NCP_IAM_ACCESS_KEY} - NCP_CREDENTIAL_IAM_SECRET_KEY: ${MC_COST_OPTIMIZER_NCP_IAM_SECRET_KEY} - - AZURE_RIGHTSIZER_BATCH_CRON_SCHEDULE: ${MC_COST_OPTIMIZER_NCP_VM_RIGHTSIZER_SCHEDULE} - - COSTOPTI_ALARMSERVICE_URL: ${MC_COST_OPTIMIZER_ALARM_URL} - COSTOPTI_ASSETCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_ASSET_COLLECTOR_URL} - COSTOPTI_COSTCOLLECTOR_URL: ${MC_COST_OPTIMIZER_COST_COLLECTOR_URL} - COSTOPTI_COSTPROCESSOR_URL: ${MC_COST_OPTIMIZER_COST_PROCESSOR_URL} - COSTOPTI_COSTSELECTOR_URL: ${MC_COST_OPTIMIZER_COST_SELECTOR_URL} + restart: on-failure + container_name: mc-cost-optimizer-ncp-vm-rightsizer + image: cloudbaristaorg/mc-costopti-ncp-vm-rightsizer:0.5.4 + networks: + - mc-cost-optimizer-network + - mc-observability-network + - mc-infra-manager-network + - mc-web-console-network + ports: + - target: 8095 + published: ${MC_COST_OPTIMIZER_NCP_RIGHTSIZER_PORT} + protocol: tcp + depends_on: + - mc-cost-optimizer-db + volumes: + - ./tool/mcc:/app/tool/mcc + environment: + SPRING_DATASOURCE_URL: ${CO_COST_DB_URL} + SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} + SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} + + NCP_CREDENTIAL_IAM_ACCESS_KEY: ${CO_NCP_IAM_ACCESS_KEY} + NCP_CREDENTIAL_IAM_SECRET_KEY: ${CO_NCP_IAM_SECRET_KEY} + + AZURE_RIGHTSIZER_BATCH_CRON_SCHEDULE: ${CO_AZURE_VM_RIGHTSIZER_SCHEDULE} + + COSTOPTI_ALARMSERVICE_URL: ${CO_ALARM_URL} + COSTOPTI_ASSETCOLLECTOR_URL: ${CO_COST_ASSET_COLLECTOR_URL} + COSTOPTI_COSTCOLLECTOR_URL: ${CO_COST_COLLECTOR_URL} + COSTOPTI_COSTPROCESSOR_URL: ${CO_COST_PROCESSOR_URL} + COSTOPTI_COSTSELECTOR_URL: ${CO_COST_SELECTOR_URL} + tumblebug.url: ${CO_TBB_URL} + tumblebug.username: ${CO_TBB_USERNAME} + tumblebug.password: ${CO_TBB_PW} mc-cost-optimizer-init-volume: image: busybox:stable @@ -729,9 +772,9 @@ services: condition: service_completed_successfully environment: - ALLOW_EMPTY_PASSWORD=no - - MYSQL_ROOT_PASSWORD=${MC_COST_OPTIMIZER_MYSQL_ROOT_PASSWORD} - - MYSQL_USER=${MC_COST_OPTIMIZER_MYSQL_USER} - - MYSQL_PASSWORD=${MC_COST_OPTIMIZER_MYSQL_PASSWORD} + - MYSQL_ROOT_PASSWORD=${CO_MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${CO_MYSQL_USER} + - MYSQL_PASSWORD=${CO_MYSQL_PASSWORD} command: - --skip-character-set-client-handshake ports: From 9f7dfa9b1de3102057db949b853f6c170b6f9c6a Mon Sep 17 00:00:00 2001 From: yoonsuihn Date: Mon, 15 Jun 2026 00:21:36 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20mc-cost-optimizer=20OpenBao=20?= =?UTF-8?q?=ED=81=AC=EB=A0=88=EB=8D=B4=EC=85=9C=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .env.setup에 CO_OPENBAO_ENABLED/ADDRESS/TOKEN 추가 (mc-infra-manager OpenBao 재사용) - OpenBao 사용 6개 모듈에 OPENBAO_ENABLED/ADDRESS/TOKEN 주입 (cost-collector, azure/ncp collector, gcp-collector, azure/ncp vm-rightsizer) - gcp_billing_raw DDL 업데이트 --- conf/docker/.env.setup | 3 + .../init/01_init_cost_db_ddl.sql | 89 ++++++++++--------- conf/docker/docker-compose.yaml | 24 +++++ 3 files changed, 74 insertions(+), 42 deletions(-) diff --git a/conf/docker/.env.setup b/conf/docker/.env.setup index b3f5b5d..1dcb149 100644 --- a/conf/docker/.env.setup +++ b/conf/docker/.env.setup @@ -180,6 +180,9 @@ CO_MAIL_DB_NAME=mailing CO_MYSQL_ROOT_PASSWORD=0000 CO_MYSQL_USER=mcmpcostopti CO_MYSQL_PASSWORD=0000 +CO_OPENBAO_ENABLED=true +CO_OPENBAO_ADDRESS=http://mc-infra-manager-openbao:${MC_INFRA_MANAGER_OPENBAO_PORT} +CO_OPENBAO_TOKEN=${MC_INFRA_MANAGER_OPENBAO_VAULT_TOKEN} CO_COST_DB_URL_NEW=jdbc:mysql://mc-cost-optimizer-db:3306/${CO_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true CO_COST_DB_URL=jdbc:mariadb://mc-cost-optimizer-db:3306/${CO_COST_DB_NAME}?autoReconnect=true&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8 diff --git a/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql b/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql index 391b132..e3e6b2a 100644 --- a/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql +++ b/conf/docker/conf/mc-cost-optimizer/init/01_init_cost_db_ddl.sql @@ -370,48 +370,53 @@ CREATE TABLE `unused_daily_mart` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci COMMENT='Azure/NCP Unused 자원 분석용 일별 메트릭 마트'; - -CREATE TABLE IF NOT EXISTS `gcp_billing_raw` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', - `created` datetime DEFAULT NULL COMMENT '수집 시각', - `billing_account_id` varchar(255) DEFAULT NULL COMMENT '청구 계정 ID', - `cost` double DEFAULT NULL COMMENT '발생 비용', - `cost_type` varchar(50) DEFAULT NULL COMMENT '비용 타입 (regular, tax, adjustment, rounding_error)', - `currency` varchar(10) DEFAULT NULL COMMENT '통화 코드 (KRW, USD)', - `currency_conversion_rate` double DEFAULT NULL COMMENT '환율', - `export_time` datetime DEFAULT NULL COMMENT '데이터 추출 시각', - `invoice_month` varchar(6) DEFAULT NULL COMMENT '청구월 (YYYYMM)', - `service_id` varchar(255) DEFAULT NULL COMMENT '서비스 고유 ID', - `service_description` varchar(255) DEFAULT NULL COMMENT '서비스 명칭', - `sku_id` varchar(255) DEFAULT NULL COMMENT 'SKU 고유 ID', - `sku_description` varchar(512) DEFAULT NULL COMMENT 'SKU 상세 명칭', - `project_id` varchar(255) DEFAULT NULL COMMENT '프로젝트 ID', - `project_number` varchar(255) DEFAULT NULL COMMENT '프로젝트 번호', - `project_name` varchar(255) DEFAULT NULL COMMENT '프로젝트 명칭', - `project_ancestry_numbers` varchar(512) DEFAULT NULL COMMENT '상위 조직 경로', - `location` varchar(255) DEFAULT NULL COMMENT '상세 위치', - `location_country` varchar(10) DEFAULT NULL COMMENT '국가 코드', - `location_region` varchar(255) DEFAULT NULL COMMENT '리전', - `location_zone` varchar(255) DEFAULT NULL COMMENT '존', - `usage_start_time` datetime DEFAULT NULL COMMENT '사용 시작 시각', - `usage_end_time` datetime DEFAULT NULL COMMENT '사용 종료 시각', - `usage_amount` double DEFAULT NULL COMMENT '사용량', - `usage_unit` varchar(50) DEFAULT NULL COMMENT '사용량 단위', - `usage_amount_in_pricing_units` double DEFAULT NULL COMMENT '과금 단위 기준 수량', - `usage_pricing_unit` varchar(50) DEFAULT NULL COMMENT '과금 단위', - `adjustment_info_id` varchar(255) DEFAULT NULL COMMENT '조정 ID', - `adjustment_info_description` varchar(512) DEFAULT NULL COMMENT '조정 설명', - `adjustment_info_mode` varchar(50) DEFAULT NULL COMMENT '조정 모드', - `adjustment_info_type` varchar(50) DEFAULT NULL COMMENT '조정 타입', - `labels` text DEFAULT NULL COMMENT '라벨 (JSON)', - `system_labels` text DEFAULT NULL COMMENT '시스템 라벨 (JSON)', - `tags` text DEFAULT NULL COMMENT '태그 (JSON)', - PRIMARY KEY (`id`), - KEY `idx_billing_date` (`billing_account_id`,`invoice_month`), - KEY `idx_project_date` (`project_id`,`usage_start_time`), - KEY `idx_service` (`service_description`,`usage_start_time`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci COMMENT='GCP 빌링 원본 데이터'; - +-- cost.gcp_billing_raw definition + +CREATE TABLE `gcp_billing_raw` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', + `created` datetime DEFAULT NULL COMMENT '수집 시각', + `billing_account_id` varchar(255) DEFAULT NULL COMMENT '청구 계정 ID', + `cost` double DEFAULT NULL COMMENT '발생 비용', + `cost_type` varchar(50) DEFAULT NULL COMMENT '비용 타입 (regular, tax, adjustment, rounding_error)', + `currency` varchar(10) DEFAULT NULL COMMENT '통화 코드 (KRW, USD)', + `currency_conversion_rate` double DEFAULT NULL COMMENT '환율', + `export_time` datetime DEFAULT NULL COMMENT '데이터 추출 시각', + `invoice_month` varchar(6) DEFAULT NULL COMMENT '청구월 (YYYYMM)', + `service_id` varchar(255) DEFAULT NULL COMMENT '서비스 고유 ID', + `service_description` varchar(255) DEFAULT NULL COMMENT '서비스 명칭', + `sku_id` varchar(255) DEFAULT NULL COMMENT 'SKU 고유 ID', + `sku_description` varchar(512) DEFAULT NULL COMMENT 'SKU 상세 명칭', + `project_id` varchar(255) DEFAULT NULL COMMENT '프로젝트 ID', + `project_number` varchar(255) DEFAULT NULL COMMENT '프로젝트 번호', + `project_name` varchar(255) DEFAULT NULL COMMENT '프로젝트 명칭', + `project_ancestry_numbers` varchar(512) DEFAULT NULL COMMENT '상위 조직 경로', + `location` varchar(255) DEFAULT NULL COMMENT '상세 위치', + `location_country` varchar(10) DEFAULT NULL COMMENT '국가 코드', + `location_region` varchar(255) DEFAULT NULL COMMENT '리전', + `location_zone` varchar(255) DEFAULT NULL COMMENT '존', + `usage_start_time` datetime DEFAULT NULL COMMENT '사용 시작 시각', + `usage_end_time` datetime DEFAULT NULL COMMENT '사용 종료 시각', + `usage_amount` double DEFAULT NULL COMMENT '사용량', + `usage_unit` varchar(50) DEFAULT NULL COMMENT '사용량 단위', + `usage_amount_in_pricing_units` double DEFAULT NULL COMMENT '과금 단위 기준 수량', + `usage_pricing_unit` varchar(50) DEFAULT NULL COMMENT '과금 단위', + `adjustment_info_id` varchar(255) DEFAULT NULL COMMENT '조정 ID', + `adjustment_info_description` varchar(512) DEFAULT NULL COMMENT '조정 설명', + `adjustment_info_mode` varchar(50) DEFAULT NULL COMMENT '조정 모드', + `adjustment_info_type` varchar(50) DEFAULT NULL COMMENT '조정 타입', + `labels` text DEFAULT NULL COMMENT '라벨 (JSON)', + `system_labels` text DEFAULT NULL COMMENT '시스템 라벨 (JSON)', + `tags` text DEFAULT NULL COMMENT '태그 (JSON)', + `csp_instanceid` varchar(200) DEFAULT NULL COMMENT 'labels.sys_cspresourceid (servicegroup_meta 조인키)', + `vm_id` varchar(100) DEFAULT NULL COMMENT 'labels.sys_id', + `mci_id` varchar(100) DEFAULT NULL COMMENT 'labels.sys_infraid', + `service_cd` varchar(100) DEFAULT NULL COMMENT 'labels.sys_namespace (ns_id, 매핑 폴백)', + PRIMARY KEY (`id`), + KEY `idx_billing_date` (`billing_account_id`,`invoice_month`), + KEY `idx_project_date` (`project_id`,`usage_start_time`), + KEY `idx_service` (`service_description`,`usage_start_time`), + KEY `idx_gbr_csp_instanceid` (`csp_instanceid`) +) ENGINE=InnoDB AUTO_INCREMENT=579 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci COMMENT='GCP 빌링 원본 데이터'; CREATE TABLE IF NOT EXISTS `provider_keys` ( `id` bigint NOT NULL AUTO_INCREMENT, diff --git a/conf/docker/docker-compose.yaml b/conf/docker/docker-compose.yaml index 5216b4d..1bb86d3 100644 --- a/conf/docker/docker-compose.yaml +++ b/conf/docker/docker-compose.yaml @@ -462,6 +462,11 @@ services: spring.datasource.hikari.batch.jdbc-url: ${CO_COST_DB_URL} spring.datasource.hikari.batch.username: ${CO_MYSQL_USER} spring.datasource.hikari.batch.password: ${CO_MYSQL_PASSWORD} + + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} + unusedBatchCronSchedule: ${CO_COST_COLLECT_UNUSED_CRON_SCHEDULE} curBatchCronSchedule: ${CO_COST_COLLECT_CUR_CRON_SCHEDULE} aws.data.export.name: ${CO_AWS_CUR_EXPORT_NAME} @@ -592,6 +597,10 @@ services: SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} + AZURE_CREDENTIAL_TENANT_ID: ${CO_AZURE_TENANT_ID} AZURE_CREDENTIAL_CLIENT_ID: ${CO_AZURE_CLIENT_ID} AZURE_CREDENTIAL_CLIENT_SECRET: ${CO_AZURE_CLIENT_SECRET} @@ -637,6 +646,9 @@ services: gcp.table: ${CO_GCP_BQ_TABLE} gcpBillingCronSchedule: ${CO_GCP_BATCH_CRON_SCHEDULE} costopti.alarmservice.url: ${CO_ALARM_URL} + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} tumblebug.url: ${CO_TBB_URL} tumblebug.username: ${CO_TBB_USERNAME} @@ -665,6 +677,10 @@ services: SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} + NCP_CREDENTIAL_IAM_ACCESS_KEY: ${CO_NCP_IAM_ACCESS_KEY} NCP_CREDENTIAL_IAM_SECRET_KEY: ${CO_NCP_IAM_SECRET_KEY} @@ -702,6 +718,10 @@ services: SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} + AZURE_CREDENTIAL_TENANT_ID: ${CO_AZURE_TENANT_ID} AZURE_CREDENTIAL_CLIENT_ID: ${CO_AZURE_CLIENT_ID} AZURE_CREDENTIAL_CLIENT_SECRET: ${CO_AZURE_CLIENT_SECRET} @@ -738,6 +758,10 @@ services: SPRING_DATASOURCE_USERNAME: ${CO_MYSQL_USER} SPRING_DATASOURCE_PASSWORD: ${CO_MYSQL_PASSWORD} + OPENBAO_ENABLED: ${CO_OPENBAO_ENABLED} + OPENBAO_ADDRESS: ${CO_OPENBAO_ADDRESS} + OPENBAO_TOKEN: ${CO_OPENBAO_TOKEN} + NCP_CREDENTIAL_IAM_ACCESS_KEY: ${CO_NCP_IAM_ACCESS_KEY} NCP_CREDENTIAL_IAM_SECRET_KEY: ${CO_NCP_IAM_SECRET_KEY} From 6c7108fd3a69a1179a31b5a8a367fb5b57f0f0c1 Mon Sep 17 00:00:00 2001 From: yoonsuihn Date: Mon, 15 Jun 2026 02:19:39 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20cost-ml-scorer=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20compose=EC=99=80=20.env.setup=EC=97=90=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/docker/.env.setup | 5 +++++ conf/docker/docker-compose.yaml | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/conf/docker/.env.setup b/conf/docker/.env.setup index 1dcb149..de61b95 100644 --- a/conf/docker/.env.setup +++ b/conf/docker/.env.setup @@ -34,6 +34,7 @@ MC_COST_OPTIMIZER_NCP_COLLECTOR_PORT=18094 MC_COST_OPTIMIZER_GCP_COLLECTOR_PORT=28095 MC_COST_OPTIMIZER_AZURE_RIGHTSIZER_PORT=18092 MC_COST_OPTIMIZER_NCP_RIGHTSIZER_PORT=18095 +MC_COST_OPTIMIZER_ML_SCORER_PORT=18096 MC_COST_OPTIMIZER_DB_HOST_PORT=3307 MC_APPLICATION_MANAGER_DB_HOST_PORT=18085 MC_APPLICATION_MANAGER_NEXUS_PORT=8081 @@ -239,6 +240,10 @@ CO_NCP_SERVICE_BATCH_CRON_SCHEDULE=0 0 0 * * ? CO_NCP_VM_BATCH_CRON_SCHEDULE=0 10 0 * * ? CO_NCP_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? +## Cost-ML-Scorer (rightsizing score API, reads cost.asset_compute_metric) +CO_ML_SCORER_URL=http://mc-cost-optimizer-ml-scorer:8096 +CO_ML_SCORER_WINDOW_DAYS=30 + #Tumblebug CO_TBB_URL=http://mc-infra-manager:1323/tumblebug CO_TBB_USERNAME=default diff --git a/conf/docker/docker-compose.yaml b/conf/docker/docker-compose.yaml index 1bb86d3..46f9e55 100644 --- a/conf/docker/docker-compose.yaml +++ b/conf/docker/docker-compose.yaml @@ -776,6 +776,33 @@ services: tumblebug.username: ${CO_TBB_USERNAME} tumblebug.password: ${CO_TBB_PW} + mc-cost-optimizer-ml-scorer: + restart: on-failure + container_name: mc-cost-optimizer-ml-scorer + image: cloudbaristaorg/mc-costopti-ml-scorer:0.5.5 + networks: + - mc-cost-optimizer-network + - mc-observability-network + - mc-infra-manager-network + - mc-web-console-network + ports: + - target: 8096 + published: ${MC_COST_OPTIMIZER_ML_SCORER_PORT} + protocol: tcp + depends_on: + - mc-cost-optimizer-db + volumes: + - ./tool/mcc:/app/tool/mcc + environment: + COST_DB_URL: ${CO_COST_DB_URL} + COST_DB_USERNM: ${CO_MYSQL_USER} + COST_DB_PW: ${CO_MYSQL_PASSWORD} + SERVER_PORT: 8096 + WINDOW_DAYS: ${CO_ML_SCORER_WINDOW_DAYS:-30} + healthcheck: + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8096/health')"] + <<: *default-health-check + mc-cost-optimizer-init-volume: image: busybox:stable container_name: mc-cost-optimizer-init-volume From 51b198792e014ef3555feeac2d3cdfd3912c8d54 Mon Sep 17 00:00:00 2001 From: yoonsuihn Date: Mon, 15 Jun 2026 04:04:06 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix(cost-optimizer):=20BackEnd=EC=97=90=20M?= =?UTF-8?q?L=20scorer=20URL=C2=B7LLM=20=EB=A7=88=EC=8A=A4=ED=84=B0?= =?UTF-8?q?=ED=82=A4=20env=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/docker/.env.setup | 1 + conf/docker/docker-compose.yaml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/conf/docker/.env.setup b/conf/docker/.env.setup index de61b95..d61d4bc 100644 --- a/conf/docker/.env.setup +++ b/conf/docker/.env.setup @@ -243,6 +243,7 @@ CO_NCP_VM_RIGHTSIZER_SCHEDULE=0 20 0 * * ? ## Cost-ML-Scorer (rightsizing score API, reads cost.asset_compute_metric) CO_ML_SCORER_URL=http://mc-cost-optimizer-ml-scorer:8096 CO_ML_SCORER_WINDOW_DAYS=30 +CO_LLM_KEY_MASTER= #Tumblebug CO_TBB_URL=http://mc-infra-manager:1323/tumblebug diff --git a/conf/docker/docker-compose.yaml b/conf/docker/docker-compose.yaml index 46f9e55..242462c 100644 --- a/conf/docker/docker-compose.yaml +++ b/conf/docker/docker-compose.yaml @@ -437,6 +437,8 @@ services: costopti.costcollector.url: ${CO_COST_COLLECTOR_URL} costopti.costprocessor.url: ${CO_COST_PROCESSOR_URL} costopti.costselector.url: ${CO_COST_SELECTOR_URL} + ml.rightsize.base-url: ${CO_ML_SCORER_URL} + llm.key.master: ${CO_LLM_KEY_MASTER} healthcheck: test: [ "CMD", "/app/tool/mcc", "rest", "get", "http://localhost:9090/api/costopti/be/readyz" ] <<: *default-health-check From dcaaab7d575eec3fb49755cfc63ee383cd8ea861 Mon Sep 17 00:00:00 2001 From: yoonsuihn Date: Mon, 15 Jun 2026 04:06:24 +0900 Subject: [PATCH 5/5] =?UTF-8?q?release:=200.5.5=20=EB=A6=B4=EB=A6=AC?= =?UTF-8?q?=EC=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/docker/docker-compose.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/conf/docker/docker-compose.yaml b/conf/docker/docker-compose.yaml index 242462c..0e37632 100644 --- a/conf/docker/docker-compose.yaml +++ b/conf/docker/docker-compose.yaml @@ -398,7 +398,7 @@ services: mc-cost-optimizer-fe: restart: unless-stopped container_name: mc-cost-optimizer-fe - image: cloudbaristaorg/mc-costopti-ui:0.5.4 + image: cloudbaristaorg/mc-costopti-ui:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -415,7 +415,7 @@ services: mc-cost-optimizer-be: restart: on-failure container_name: mc-cost-optimizer-be - image: cloudbaristaorg/mc-costopti-api:0.5.4 + image: cloudbaristaorg/mc-costopti-api:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -446,7 +446,7 @@ services: mc-cost-optimizer-cost-collector: restart: on-failure container_name: mc-cost-optimizer-cost-collector - image: cloudbaristaorg/mc-costopti-costcollector:0.5.4 + image: cloudbaristaorg/mc-costopti-costcollector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -479,7 +479,7 @@ services: mc-cost-optimizer-cost-processor: restart: on-failure container_name: mc-cost-optimizer-cost-processor - image: cloudbaristaorg/mc-costopti-costprocessor:0.5.4 + image: cloudbaristaorg/mc-costopti-costprocessor:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -505,7 +505,7 @@ services: mc-cost-optimizer-cost-selector: restart: on-failure container_name: mc-cost-optimizer-cost-selector - image: cloudbaristaorg/mc-costopti-costselector:0.5.4 + image: cloudbaristaorg/mc-costopti-costselector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -531,7 +531,7 @@ services: mc-cost-optimizer-alarm-service: restart: on-failure container_name: mc-cost-optimizer-alarm-service - image: cloudbaristaorg/mc-costopti-alarm:0.5.4 + image: cloudbaristaorg/mc-costopti-alarm:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -555,7 +555,7 @@ services: mc-cost-optimizer-asset-collector: restart: on-failure container_name: mc-cost-optimizer-asset-collector - image: cloudbaristaorg/mc-costopti-assetcollector:0.5.4 + image: cloudbaristaorg/mc-costopti-assetcollector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -580,7 +580,7 @@ services: mc-cost-optimizer-cost-azure-collector: restart: on-failure container_name: mc-cost-optimizer-cost-azure-collector - image: cloudbaristaorg/mc-costopti-azure-collector:0.5.4 + image: cloudbaristaorg/mc-costopti-azure-collector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -620,7 +620,7 @@ services: mc-cost-optimizer-gcp-collector: restart: on-failure container_name: mc-cost-optimizer-gcp-collector - image: cloudbaristaorg/mc-costopti-gcpcollector:0.5.4 + image: cloudbaristaorg/mc-costopti-gcpcollector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -660,7 +660,7 @@ services: mc-cost-optimizer-cost-ncp-collector: restart: on-failure container_name: mc-cost-optimizer-cost-ncp-collector - image: cloudbaristaorg/mc-costopti-ncp-collector:0.5.4 + image: cloudbaristaorg/mc-costopti-ncp-collector:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -701,7 +701,7 @@ services: mc-cost-optimizer-azure-vm-rightsizer: restart: on-failure container_name: mc-cost-optimizer-azure-vm-rightsizer - image: cloudbaristaorg/mc-costopti-azure-vm-rightsizer:0.5.4 + image: cloudbaristaorg/mc-costopti-azure-vm-rightsizer:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network @@ -741,7 +741,7 @@ services: mc-cost-optimizer-ncp-vm-rightsizer: restart: on-failure container_name: mc-cost-optimizer-ncp-vm-rightsizer - image: cloudbaristaorg/mc-costopti-ncp-vm-rightsizer:0.5.4 + image: cloudbaristaorg/mc-costopti-ncp-vm-rightsizer:0.5.5 networks: - mc-cost-optimizer-network - mc-observability-network