--- title: Custom Billing Events --- :::important Enterprise Feature Sending custom billing events is available under the ClearML Enterprise plan. ::: ClearML supports sending custom events to selected Kafka topics. Event sending is triggered by API calls and is available only for the companies with the `custom_events` settings set. ## Enabling Custom Events in ClearML Server :::important Prerequisite **Precondition**: Customer Kafka for custom events is installed and reachable from the `apiserver`. ::: Set the following environment variables in the ClearML Enterprise helm chart under the `apiserver.extraEnv`: * Enable custom events: ``` - name: CLEARML__services__custom_events__enabled value: "true" ``` * Mount custom message template files into `/mnt/custom_events/templates` folder in the `apiserver` container and point the `apiserver` into it: ``` - name: CLEARML__services__custom_events__template_folder value: "/mnt/custom_events/templates" ``` * Configure the Kafka host for sending events: ``` - name: CLEARML__hosts__kafka__custom_events__host value: "[]" ``` Configure Kafka security parameters. Below is the example for SASL plaintext security: ``` - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__security_protocol value: "SASL_PLAINTEXT" - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_mechanism value: "SCRAM-SHA-512" - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_plain_username value: "" - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_plain_password value: "" ``` * Define Kafka topics for lifecycle and inventory messages: ``` - name: CLEARML__services__custom_events__channels__main__topics__service_instance_lifecycle value: "lifecycle" - name: CLEARML__services__custom_events__channels__main__topics__service_instance_inventory value: "inventory" ``` * For the desired companies set up the custom events properties required by the event message templates: ``` curl $APISERVER_URL/system.update_company_custom_events_config -H "Content-Type: application/json" -u $APISERVER_KEY:$APISERVER_SECRET -d'{ "company": "", "fields": { "service_instance_id": "", "service_instance_name": "", "service_instance_customer_tenant_name": "", "service_instance_customer_space_name": "", "service_instance_customer_space_id": "", "parameters_connection_points": ["", ""] }}' ``` ## Sending Custom Events to the API Server :::important Prerequisite **Precondition:** Dedicated custom-events Redis instance installed and reachable from all the custom events deployments. ::: Environment lifecycle events are sent directly by the `apiserver`. Other event types are emitted by the following helm charts: * `clearml-pods-monitor-exporter` - Monitors running pods and sends container lifecycle events (should run one per cluster with a unique identifier, a UUID is required for the installation): ``` # -- Universal Unique string to identify Pods Monitor instances across worker clusters. It cannot be empty. # Uniqueness is required across different cluster installations to preserve the reported data status. podsMonitorUUID: "" # Interval checkIntervalSeconds: 60 ``` * `clearml-pods-inventory` - Periodically sends inventory events about running pods. ``` # Cron schedule - https://crontab.guru/ cronJob: schedule: "@daily" ``` * `clearml-company-inventory` - Monitors Clearml companies and sends environment inventory events. ``` # Cron schedule - https://crontab.guru/ cronJob: schedule: "@daily" ``` For every script chart add the below configuration to enable redis access and connection to the `apiserver`: ``` clearml: apiServerUrlReference: "" apiServerKey: "" apiServerSecret: "" redisConnection: host: "" port: password: "" ``` See all other available options to customize the `custom-events` charts by running: ``` helm show readme allegroai-enterprise/ ```