From f4d666c7fd832307dccb7f0096a48c917179449d Mon Sep 17 00:00:00 2001 From: Angie Wang Date: Fri, 19 Oct 2018 14:46:27 -0400 Subject: [PATCH 1/1] ceilometer chart updates This commit includes the following changes: - add polling process with ipmi function - run ceilometer-upgrade instead of the obsolete command ceilometer-dbsync - set ceilometer cache server - update event_definitions.yaml in values.yaml - add missing defintion yaml files for meter (meters.yaml, polling.yaml) - configure messaging_urls option to listen to each rabbitmq vhost - add the ability to push events to panko We should try to upstream above changes. --- ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl | 13 + ceilometer/templates/bin/_db-sync.sh.tpl | 2 +- ceilometer/templates/configmap-bin.yaml | 2 + ceilometer/templates/configmap-etc.yaml | 6 + ceilometer/templates/daemonset-compute.yaml | 4 + ceilometer/templates/daemonset-ipmi.yaml | 105 ++ ceilometer/templates/deployment-central.yaml | 4 + ceilometer/templates/deployment-notification.yaml | 20 + ceilometer/values.yaml | 1532 ++++++++++----------- 9 files changed, 901 insertions(+), 787 deletions(-) create mode 100644 ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl create mode 100644 ceilometer/templates/daemonset-ipmi.yaml diff --git a/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl new file mode 100644 index 0000000..ad280c3 --- /dev/null +++ b/ceilometer/templates/bin/_ceilometer-ipmi.sh.tpl @@ -0,0 +1,13 @@ +#!/bin/bash + +{{/* +Copyright (c) 2018 Wind River Systems, Inc. + +SPDX-License-Identifier: Apache-2.0 +*/}} + +set -ex + +exec ceilometer-polling \ + --polling-namespaces ipmi \ + --config-file /etc/ceilometer/ceilometer.conf diff --git a/ceilometer/templates/bin/_db-sync.sh.tpl b/ceilometer/templates/bin/_db-sync.sh.tpl index 02f6f5d..ba7c1d8 100644 --- a/ceilometer/templates/bin/_db-sync.sh.tpl +++ b/ceilometer/templates/bin/_db-sync.sh.tpl @@ -18,4 +18,4 @@ limitations under the License. set -ex -exec ceilometer-dbsync +exec ceilometer-upgrade --skip-metering-database diff --git a/ceilometer/templates/configmap-bin.yaml b/ceilometer/templates/configmap-bin.yaml index 6c7d59a..558f24e 100644 --- a/ceilometer/templates/configmap-bin.yaml +++ b/ceilometer/templates/configmap-bin.yaml @@ -53,6 +53,8 @@ data: {{ tuple "bin/_ceilometer-collector.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} ceilometer-compute.sh: | {{ tuple "bin/_ceilometer-compute.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} + ceilometer-ipmi.sh: | +{{ tuple "bin/_ceilometer-ipmi.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} ceilometer-notification.sh: | {{ tuple "bin/_ceilometer-notification.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} rabbit-init.sh: | diff --git a/ceilometer/templates/configmap-etc.yaml b/ceilometer/templates/configmap-etc.yaml index 17ddb1b..c48a3b8 100644 --- a/ceilometer/templates/configmap-etc.yaml +++ b/ceilometer/templates/configmap-etc.yaml @@ -32,6 +32,10 @@ limitations under the License. {{- $_ := set .Values.conf.ceilometer.keystone_authtoken "memcache_secret_key" ( default ( randAlphaNum 64 ) .Values.endpoints.oslo_cache.auth.memcache_secret_key ) -}} {{- end -}} +{{- if empty .Values.conf.ceilometer.cache.memcache_servers -}} +{{- $_ := tuple "oslo_cache" "internal" "memcache" . | include "helm-toolkit.endpoints.host_and_port_endpoint_uri_lookup" | set .Values.conf.ceilometer.cache "memcache_servers" -}} +{{- end -}} + {{- if empty .Values.conf.ceilometer.database.connection -}} {{- $_ := tuple "oslo_db" "internal" "ceilometer" "mysql" . | include "helm-toolkit.endpoints.authenticated_endpoint_uri_lookup"| set .Values.conf.ceilometer.database "connection" -}} {{- end -}} @@ -120,5 +124,7 @@ data: pipeline.yaml: {{ toYaml .Values.conf.pipeline | b64enc }} event_definitions.yaml: {{ toYaml .Values.conf.event_definitions | b64enc }} gnocchi_resources.yaml: {{ toYaml .Values.conf.gnocchi_resources | b64enc }} + meters.yaml: {{ toYaml .Values.conf.meters | b64enc }} + polling.yaml: {{ toYaml .Values.conf.polling | b64enc }} {{ include "helm-toolkit.snippets.values_template_renderer" (dict "envAll" $envAll "template" .Values.conf.wsgi_ceilometer "key" "wsgi-ceilometer.conf" "format" "Secret" ) | indent 2 }} {{- end }} diff --git a/ceilometer/templates/daemonset-compute.yaml b/ceilometer/templates/daemonset-compute.yaml index 686572a..bff2e15 100644 --- a/ceilometer/templates/daemonset-compute.yaml +++ b/ceilometer/templates/daemonset-compute.yaml @@ -91,6 +91,10 @@ spec: mountPath: /etc/ceilometer/gnocchi_resources.yaml subPath: gnocchi_resources.yaml readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/polling.yaml + subPath: polling.yaml + readOnly: true - name: ceilometer-bin mountPath: /tmp/ceilometer-compute.sh subPath: ceilometer-compute.sh diff --git a/ceilometer/templates/daemonset-ipmi.yaml b/ceilometer/templates/daemonset-ipmi.yaml new file mode 100644 index 0000000..3119ace --- /dev/null +++ b/ceilometer/templates/daemonset-ipmi.yaml @@ -0,0 +1,105 @@ +{{/* +Copyright (c) 2018 Wind River Systems, Inc. + +SPDX-License-Identifier: Apache-2.0 +*/}} + +{{- if .Values.manifests.daemonset_ipmi }} +{{- $envAll := . }} + +{{- $mounts_ceilometer_ipmi := .Values.pod.mounts.ceilometer_ipmi.ceilometer_ipmi }} +{{- $mounts_ceilometer_ipmi_init := .Values.pod.mounts.ceilometer_ipmi.init_container }} + +{{- $serviceAccountName := "ceilometer-ipmi" }} +{{ tuple $envAll "ipmi" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: ceilometer-ipmi + annotations: + {{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }} + labels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} +spec: + selector: + matchLabels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 6 }} +{{ tuple $envAll "ipmi" | include "helm-toolkit.snippets.kubernetes_upgrades_daemonset" | indent 2 }} + template: + metadata: + labels: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 8 }} + annotations: + configmap-bin-hash: {{ tuple "configmap-bin.yaml" . | include "helm-toolkit.utils.hash" }} + configmap-etc-hash: {{ tuple "configmap-etc.yaml" . | include "helm-toolkit.utils.hash" }} + spec: + serviceAccountName: {{ $serviceAccountName }} + affinity: +{{ tuple $envAll "ceilometer" "ipmi" | include "helm-toolkit.snippets.kubernetes_pod_anti_affinity" | indent 8 }} + hostNetwork: true + hostPID: true + dnsPolicy: ClusterFirstWithHostNet + nodeSelector: + {{ .Values.labels.ipmi.node_selector_key }}: {{ .Values.labels.ipmi.node_selector_value }} + initContainers: +{{ tuple $envAll "ipmi" $mounts_ceilometer_ipmi_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 8 }} + containers: + - name: ceilometer-ipmi +{{ tuple $envAll "ceilometer_ipmi" | include "helm-toolkit.snippets.image" | indent 10 }} +{{ tuple $envAll $envAll.Values.pod.resources.ipmi | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} + command: + - /tmp/ceilometer-ipmi.sh + volumeMounts: + - name: pod-etc-ceilometer + mountPath: /etc/ceilometer + - name: ceilometer-etc + mountPath: /etc/ceilometer/ceilometer.conf + subPath: ceilometer.conf + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/api_paste.ini + subPath: api_paste.ini + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/policy.json + subPath: policy.json + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/event_definitions.yaml + subPath: event_definitions.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/event_pipeline.yaml + subPath: event_pipeline.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/pipeline.yaml + subPath: pipeline.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/gnocchi_resources.yaml + subPath: gnocchi_resources.yaml + readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/polling.yaml + subPath: polling.yaml + readOnly: true + - name: ceilometer-bin + mountPath: /tmp/ceilometer-ipmi.sh + subPath: ceilometer-ipmi.sh + readOnly: true +{{ if $mounts_ceilometer_ipmi.volumeMounts }}{{ toYaml $mounts_ceilometer_ipmi.volumeMounts | indent 12 }}{{ end }} + volumes: + - name: pod-etc-ceilometer + emptyDir: {} + - name: ceilometer-etc + secret: + secretName: ceilometer-etc + defaultMode: 0444 + - name: ceilometer-bin + configMap: + name: ceilometer-bin + defaultMode: 0555 +{{ if $mounts_ceilometer_ipmi.volumes }}{{ toYaml $mounts_ceilometer_ipmi.volumes | indent 8 }}{{ end }} +{{- end }} diff --git a/ceilometer/templates/deployment-central.yaml b/ceilometer/templates/deployment-central.yaml index b7a597b..7a6cd2b 100644 --- a/ceilometer/templates/deployment-central.yaml +++ b/ceilometer/templates/deployment-central.yaml @@ -89,6 +89,10 @@ spec: mountPath: /etc/ceilometer/gnocchi_resources.yaml subPath: gnocchi_resources.yaml readOnly: true + - name: ceilometer-etc + mountPath: /etc/ceilometer/polling.yaml + subPath: polling.yaml + readOnly: true - name: ceilometer-bin mountPath: /tmp/ceilometer-central.sh subPath: ceilometer-central.sh diff --git a/ceilometer/templates/deployment-notification.yaml b/ceilometer/templates/deployment-notification.yaml index 06fda3d..45d7ecb 100644 --- a/ceilometer/templates/deployment-notification.yaml +++ b/ceilometer/templates/deployment-notification.yaml @@ -89,14 +89,30 @@ spec: mountPath: /etc/ceilometer/gnocchi_resources.yaml subPath: gnocchi_resources.yaml readOnly: true + - name: etc-ceilometer-meters + mountPath: /etc/ceilometer/meters.d + - name: ceilometer-etc + mountPath: /etc/ceilometer/meters.d/meters.yaml + subPath: meters.yaml + readOnly: true - name: ceilometer-bin mountPath: /tmp/ceilometer-notification.sh subPath: ceilometer-notification.sh readOnly: true + - name: etcpanko + mountPath: /etc/panko + - name: panko-etc + mountPath: /etc/panko/panko.conf + subPath: panko.conf + readOnly: true {{ if $mounts_ceilometer_notification.volumeMounts }}{{ toYaml $mounts_ceilometer_notification.volumeMounts | indent 12 }}{{ end }} volumes: - name: pod-etc-ceilometer emptyDir: {} + - name: etc-ceilometer-meters + emptyDir: {} + - name: etcpanko + emptyDir: {} - name: ceilometer-etc secret: secretName: ceilometer-etc @@ -105,5 +121,9 @@ spec: configMap: name: ceilometer-bin defaultMode: 0555 + - name: panko-etc + secret: + secretName: panko-etc + defaultMode: 0444 {{ if $mounts_ceilometer_notification.volumes }}{{ toYaml $mounts_ceilometer_notification.volumes | indent 8 }}{{ end }} {{- end }} diff --git a/ceilometer/values.yaml b/ceilometer/values.yaml index 5021967..5908a4e 100644 --- a/ceilometer/values.yaml +++ b/ceilometer/values.yaml @@ -29,6 +29,9 @@ labels: central: node_selector_key: openstack-control-plane node_selector_value: enabled + ipmi: + node_selector_key: openstack-node + node_selector_value: enabled collector: node_selector_key: openstack-control-plane node_selector_value: enabled @@ -113,1041 +116,971 @@ conf: auth_type: password interface: internal notification: - messaging_urls: null + messaging_urls: + type: multistring + values: + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/ceilometer + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/cinder + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/glance + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/nova + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/keystone + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/neutron + - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/heat oslo_messaging_notifications: driver: messagingv2 topics: - notifications - profiler + cache: + enabled: true + backend: dogpile.cache.memcached event_definitions: - - event_type: compute.instance.* - traits: - deleted_at: - fields: payload.deleted_at - type: datetime + - event_type: 'compute.instance.*' + traits: &instance_traits + tenant_id: + fields: payload.tenant_id + user_id: + fields: payload.user_id + instance_id: + fields: payload.instance_id + resource_id: + fields: payload.instance_id + host: + fields: publisher_id.`split(., 1, 1)` + service: + fields: publisher_id.`split(., 0, -1)` + memory_mb: + type: int + fields: payload.memory_mb disk_gb: + type: int fields: payload.disk_gb + root_gb: type: int + fields: payload.root_gb ephemeral_gb: + type: int fields: payload.ephemeral_gb + vcpus: type: int - host: - fields: 'publisher_id.`split(., 1, 1)`' - instance_id: - fields: payload.instance_id - instance_type: - fields: payload.instance_type + fields: payload.vcpus instance_type_id: - fields: payload.instance_type_id - type: int - launched_at: - fields: payload.launched_at - type: datetime - memory_mb: - fields: payload.memory_mb type: int + fields: payload.instance_type_id + instance_type: + fields: payload.instance_type + state: + fields: payload.state os_architecture: fields: payload.image_meta.'org.openstack__1__architecture' - os_distro: - fields: payload.image_meta.'org.openstack__1__os_distro' os_version: fields: payload.image_meta.'org.openstack__1__os_version' - root_gb: - fields: payload.root_gb - type: int - service: - fields: 'publisher_id.`split(., 0, -1)`' - state: - fields: payload.state - tenant_id: - fields: payload.tenant_id - user_id: - fields: payload.user_id - vcpus: - fields: payload.vcpus - type: int + os_distro: + fields: payload.image_meta.'org.openstack__1__os_distro' + launched_at: + type: datetime + fields: payload.launched_at + deleted_at: + type: datetime + fields: payload.deleted_at + - event_type: compute.instance.update + traits: + <<: *instance_traits + old_state: + fields: payload.old_state - event_type: compute.instance.exists traits: + <<: *instance_traits audit_period_beginning: - fields: payload.audit_period_beginning type: datetime + fields: payload.audit_period_beginning audit_period_ending: - fields: payload.audit_period_ending - type: datetime - deleted_at: - fields: payload.deleted_at - type: datetime - disk_gb: - fields: payload.disk_gb - type: int - ephemeral_gb: - fields: payload.ephemeral_gb - type: int - host: - fields: 'publisher_id.`split(., 1, 1)`' - instance_id: - fields: payload.instance_id - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - type: int - launched_at: - fields: payload.launched_at type: datetime - memory_mb: - fields: payload.memory_mb - type: int - os_architecture: - fields: payload.image_meta.'org.openstack__1__architecture' - os_distro: - fields: payload.image_meta.'org.openstack__1__os_distro' - os_version: - fields: payload.image_meta.'org.openstack__1__os_version' - root_gb: - fields: payload.root_gb - type: int - service: - fields: 'publisher_id.`split(., 0, -1)`' - state: - fields: payload.state - tenant_id: - fields: payload.tenant_id + fields: payload.audit_period_ending + - event_type: ['volume.exists', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*'] + traits: &cinder_traits user_id: fields: payload.user_id - vcpus: - fields: payload.vcpus - type: int - - event_type: - - volume.exists - - volume.create.* - - volume.delete.* - - volume.resize.* - - volume.attach.* - - volume.detach.* - - volume.update.* - - snapshot.exists - - snapshot.create.* - - snapshot.delete.* - - snapshot.update.* - traits: + project_id: + fields: payload.tenant_id availability_zone: fields: payload.availability_zone - created_at: - fields: payload.created_at display_name: fields: payload.display_name - project_id: - fields: payload.tenant_id replication_status: fields: payload.replication_status status: fields: payload.status - user_id: - fields: payload.user_id - - event_type: - - volume.exists - - volume.create.* - - volume.delete.* - - volume.resize.* - - volume.attach.* - - volume.detach.* - - volume.update.* - traits: - availability_zone: - fields: payload.availability_zone created_at: fields: payload.created_at - display_name: - fields: payload.display_name - host: - fields: payload.host - project_id: - fields: payload.tenant_id - replication_status: - fields: payload.replication_status + - event_type: ['volume.exists', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*'] + traits: + <<: *cinder_traits resource_id: fields: payload.volume_id + host: + fields: payload.host size: fields: payload.size - status: - fields: payload.status type: fields: payload.volume_type + replication_status: + fields: payload.replication_status + - event_type: ['share.create.*', 'share.delete.*', 'share.extend.*', 'share.shrink.*'] + traits: &share_traits + share_id: + fields: payload.share_id user_id: fields: payload.user_id - - event_type: - - snapshot.exists - - snapshot.create.* - - snapshot.delete.* - - snapshot.update.* - traits: + project_id: + fields: payload.tenant_id + snapshot_id: + fields: payload.snapshot_id availability_zone: fields: payload.availability_zone + status: + fields: payload.status created_at: fields: payload.created_at - display_name: - fields: payload.display_name - project_id: - fields: payload.tenant_id - replication_status: - fields: payload.replication_status + share_group_id: + fields: payload.share_group_id + size: + fields: payload.size + name: + fields: payload.name + proto: + fields: payload.proto + is_public: + fields: payload.is_public + description: + fields: payload.description + host: + fields: payload.host + - event_type: ['snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*'] + traits: + <<: *cinder_traits resource_id: fields: payload.snapshot_id - status: - fields: payload.status - user_id: - fields: payload.user_id volume_id: fields: payload.volume_id - - event_type: - - image_volume_cache.* + - event_type: ['image_volume_cache.*'] traits: - host: - fields: payload.host image_id: fields: payload.image_id - - event_type: - - image.create - - image.update - - image.upload - - image.delete - traits: - created_at: - fields: payload.created_at - deleted_at: - fields: payload.deleted_at - name: - fields: payload.name + host: + fields: payload.host + - event_type: ['image.create', 'image.update', 'image.upload', 'image.delete'] + traits: &glance_crud project_id: fields: payload.owner resource_id: fields: payload.id - size: - fields: payload.size + name: + fields: payload.name status: fields: payload.status + created_at: + fields: payload.created_at user_id: fields: payload.owner + deleted_at: + fields: payload.deleted_at + size: + fields: payload.size - event_type: image.send - traits: - bytes_sent: - fields: payload.bytes_sent - type: int - destination_ip: - fields: payload.destination_ip - image_id: - fields: payload.image_id + traits: &glance_send receiver_project: fields: payload.receiver_tenant_id receiver_user: fields: payload.receiver_user_id user_id: fields: payload.owner_id + image_id: + fields: payload.image_id + destination_ip: + fields: payload.destination_ip + bytes_sent: + type: int + fields: payload.bytes_sent - event_type: orchestration.stack.* - traits: + traits: &orchestration_crud project_id: fields: payload.tenant_id + user_id: + fields: ['ctxt.trustor_user_id', 'ctxt.user_id'] resource_id: fields: payload.stack_identity - user_id: - fields: - - _context_trustor_user_id - - _context_user_id - event_type: sahara.cluster.* - traits: + traits: &sahara_crud project_id: fields: payload.project_id + user_id: + fields: ctxt.user_id resource_id: fields: payload.cluster_id - user_id: - fields: _context_user_id - event_type: sahara.cluster.health - traits: - created_at: - fields: payload.created_at - type: datetime - health_check_description: - fields: payload.health_check_description - health_check_name: - fields: payload.health_check_name + traits: &sahara_health + <<: *sahara_crud + verification_id: + fields: payload.verification_id health_check_status: fields: payload.health_check_status - project_id: - fields: payload.project_id - resource_id: - fields: payload.cluster_id + health_check_name: + fields: payload.health_check_name + health_check_description: + fields: payload.health_check_description + created_at: + type: datetime + fields: payload.created_at updated_at: - fields: payload.updated_at type: datetime - user_id: - fields: _context_user_id - verification_id: - fields: payload.verification_id - - event_type: - - identity.user.* - - identity.project.* - - identity.group.* - - identity.role.* - - 'identity.OS-TRUST:trust.*' - - identity.region.* - - identity.service.* - - identity.endpoint.* - - identity.policy.* - traits: - domain_id: - fields: payload.initiator.domain_id + fields: payload.updated_at + - event_type: ['identity.user.*', 'identity.project.*', 'identity.group.*', 'identity.role.*', 'identity.OS-TRUST:trust.*', + 'identity.region.*', 'identity.service.*', 'identity.endpoint.*', 'identity.policy.*'] + traits: &identity_crud + resource_id: + fields: payload.resource_info initiator_id: fields: payload.initiator.id project_id: fields: payload.initiator.project_id - resource_id: - fields: payload.resource_info + domain_id: + fields: payload.initiator.domain_id - event_type: identity.role_assignment.* - traits: - domain: - fields: payload.domain - group: - fields: payload.group - project: - fields: payload.project + traits: &identity_role_assignment role: fields: payload.role + group: + fields: payload.group + domain: + fields: payload.domain user: fields: payload.user + project: + fields: payload.project - event_type: identity.authenticate - traits: - action: - fields: payload.action - eventTime: - fields: payload.eventTime - eventType: - fields: payload.eventType + traits: &identity_authenticate + typeURI: + fields: payload.typeURI id: fields: payload.id - initiator_host_addr: - fields: payload.initiator.host.address - initiator_host_agent: - fields: payload.initiator.host.agent + action: + fields: payload.action + eventType: + fields: payload.eventType + eventTime: + fields: payload.eventTime + outcome: + fields: payload.outcome + initiator_typeURI: + fields: payload.initiator.typeURI initiator_id: fields: payload.initiator.id initiator_name: fields: payload.initiator.name - initiator_typeURI: - fields: payload.initiator.typeURI - observer_id: - fields: payload.observer.id - observer_typeURI: - fields: payload.observer.typeURI - outcome: - fields: payload.outcome - target_id: - fields: payload.target.id + initiator_host_agent: + fields: payload.initiator.host.agent + initiator_host_addr: + fields: payload.initiator.host.address target_typeURI: fields: payload.target.typeURI + target_id: + fields: payload.target.id + observer_typeURI: + fields: payload.observer.typeURI + observer_id: + fields: payload.observer.id + - event_type: objectstore.http.request + traits: &objectstore_request typeURI: fields: payload.typeURI - - event_type: objectstore.http.request - traits: + id: + fields: payload.id action: fields: payload.action - eventTime: - fields: payload.eventTime eventType: fields: payload.eventType - id: - fields: payload.id + eventTime: + fields: payload.eventTime + outcome: + fields: payload.outcome + initiator_typeURI: + fields: payload.initiator.typeURI initiator_id: fields: payload.initiator.id initiator_project_id: fields: payload.initiator.project_id - initiator_typeURI: - fields: payload.initiator.typeURI - observer_id: - fields: payload.observer.id - outcome: - fields: payload.outcome - target_action: - fields: payload.target.action + target_typeURI: + fields: payload.target.typeURI target_id: fields: payload.target.id - target_metadata_container: - fields: payload.target.metadata.container - target_metadata_object: - fields: payload.target.metadata.object + target_action: + fields: payload.target.action target_metadata_path: fields: payload.target.metadata.path target_metadata_version: fields: payload.target.metadata.version - target_typeURI: - fields: payload.target.typeURI - typeURI: - fields: payload.typeURI - - event_type: - - network.* - - subnet.* - - port.* - - router.* - - floatingip.* - - pool.* - - vip.* - - member.* - - health_monitor.* - - healthmonitor.* - - listener.* - - loadbalancer.* - - firewall.* - - firewall_policy.* - - firewall_rule.* - - vpnservice.* - - ipsecpolicy.* - - ikepolicy.* - - ipsec_site_connection.* - traits: - project_id: - fields: _context_tenant_id + target_metadata_container: + fields: payload.target.metadata.container + target_metadata_object: + fields: payload.target.metadata.object + observer_id: + fields: payload.observer.id + - event_type: ['network.*', 'subnet.*', 'port.*', 'router.*', 'floatingip.*', 'pool.*', 'vip.*', 'member.*', 'health_monitor.*', 'healthmonitor.*', 'listener.*', 'loadbalancer.*', 'firewall.*', 'firewall_policy.*', 'firewall_rule.*', 'vpnservice.*', 'ipsecpolicy.*', 'ikepolicy.*', 'ipsec_site_connection.*'] + traits: &network_traits user_id: - fields: _context_user_id + fields: ctxt.user_id + project_id: + fields: ctxt.tenant_id - event_type: network.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.network.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.network.id', 'payload.id'] - event_type: subnet.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.subnet.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.subnet.id', 'payload.id'] - event_type: port.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.port.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.port.id', 'payload.id'] - event_type: router.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.router.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.router.id', 'payload.id'] - event_type: floatingip.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.floatingip.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.floatingip.id', 'payload.id'] - event_type: pool.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.pool.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.pool.id', 'payload.id'] - event_type: vip.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.vip.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.vip.id', 'payload.id'] - event_type: member.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.member.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.member.id', 'payload.id'] - event_type: health_monitor.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.health_monitor.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.health_monitor.id', 'payload.id'] - event_type: healthmonitor.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.healthmonitor.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.healthmonitor.id', 'payload.id'] - event_type: listener.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.listener.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.listener.id', 'payload.id'] - event_type: loadbalancer.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.loadbalancer.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.loadbalancer.id', 'payload.id'] - event_type: firewall.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.firewall.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.firewall.id', 'payload.id'] - event_type: firewall_policy.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.firewall_policy.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.firewall_policy.id', 'payload.id'] - event_type: firewall_rule.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.firewall_rule.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.firewall_rule.id', 'payload.id'] - event_type: vpnservice.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.vpnservice.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.vpnservice.id', 'payload.id'] - event_type: ipsecpolicy.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.ipsecpolicy.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.ipsecpolicy.id', 'payload.id'] - event_type: ikepolicy.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.ikepolicy.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.ikepolicy.id', 'payload.id'] - event_type: ipsec_site_connection.* traits: - project_id: - fields: _context_tenant_id + <<: *network_traits resource_id: - fields: - - payload.ipsec_site_connection.id - - payload.id - user_id: - fields: _context_user_id + fields: ['payload.ipsec_site_connection.id', 'payload.id'] - event_type: '*http.*' - traits: - action: - fields: payload.action - eventTime: - fields: payload.eventTime - eventType: - fields: payload.eventType - id: - fields: payload.id - initiator_host_address: - fields: payload.initiator.host.address - initiator_id: - fields: payload.initiator.id - initiator_name: - fields: payload.initiator.name - initiator_typeURI: - fields: payload.initiator.typeURI - observer_id: - fields: payload.observer.id - outcome: - fields: payload.outcome + traits: &http_audit project_id: fields: payload.initiator.project_id - requestPath: - fields: payload.requestPath - target_id: - fields: payload.target.id - target_name: - fields: payload.target.name - target_typeURI: - fields: payload.target.typeURI - typeURI: - fields: payload.typeURI user_id: fields: payload.initiator.id - - event_type: '*http.response' - traits: - action: - fields: payload.action - eventTime: - fields: payload.eventTime + typeURI: + fields: payload.typeURI eventType: fields: payload.eventType - id: - fields: payload.id - initiator_host_address: - fields: payload.initiator.host.address - initiator_id: - fields: payload.initiator.id - initiator_name: - fields: payload.initiator.name - initiator_typeURI: - fields: payload.initiator.typeURI - observer_id: - fields: payload.observer.id + action: + fields: payload.action outcome: fields: payload.outcome - project_id: - fields: payload.initiator.project_id - reason_code: - fields: payload.reason.reasonCode + id: + fields: payload.id + eventTime: + fields: payload.eventTime requestPath: fields: payload.requestPath + observer_id: + fields: payload.observer.id target_id: fields: payload.target.id - target_name: - fields: payload.target.name target_typeURI: fields: payload.target.typeURI - typeURI: - fields: payload.typeURI - user_id: + target_name: + fields: payload.target.name + initiator_typeURI: + fields: payload.initiator.typeURI + initiator_id: fields: payload.initiator.id - - event_type: - - dns.domain.create - - dns.domain.update - - dns.domain.delete + initiator_name: + fields: payload.initiator.name + initiator_host_address: + fields: payload.initiator.host.address + - event_type: '*http.response' traits: - action: - fields: payload.action - created_at: - fields: payload.created_at - description: - fields: payload.description - email: - fields: payload.email - expire: - fields: payload.expire - name: - fields: payload.name - parent_domain_id: - fields: parent_domain_id - resource_id: - fields: payload.id - retry: - fields: payload.retry - serial: - fields: payload.serial + <<: *http_audit + reason_code: + fields: payload.reason.reasonCode + - event_type: ['dns.domain.create', 'dns.domain.update', 'dns.domain.delete'] + traits: &dns_domain_traits status: fields: payload.status - ttl: - fields: payload.ttl - updated_at: - fields: payload.updated_at - version: - fields: payload.version - - event_type: dns.domain.exists - traits: - action: - fields: payload.action - audit_period_beginning: - fields: payload.audit_period_beginning - type: datetime - audit_period_ending: - fields: payload.audit_period_ending - type: datetime - created_at: - fields: payload.created_at + retry: + fields: payload.retry description: fields: payload.description - email: - fields: payload.email expire: fields: payload.expire - name: - fields: payload.name - parent_domain_id: - fields: parent_domain_id - resource_id: - fields: payload.id - retry: - fields: payload.retry - serial: - fields: payload.serial - status: - fields: payload.status - ttl: - fields: payload.ttl - updated_at: - fields: payload.updated_at - version: - fields: payload.version - - event_type: trove.* - traits: - created_at: - fields: payload.created_at - type: datetime - instance_name: - fields: payload.instance_name - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - launched_at: - fields: payload.launched_at - type: datetime - nova_instance_id: - fields: payload.nova_instance_id - region: - fields: payload.region - resource_id: - fields: payload.instance_id - service_id: - fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id - - event_type: - - trove.instance.create - - trove.instance.modify_volume - - trove.instance.modify_flavor - - trove.instance.delete - traits: - availability_zone: - fields: payload.availability_zone - instance_size: - fields: payload.instance_size - type: int - name: - fields: payload.name - nova_volume_id: - fields: payload.nova_volume_id - volume_size: - fields: payload.volume_size - type: int - - event_type: trove.instance.create - traits: - availability_zone: - fields: payload.availability_zone - created_at: - fields: payload.created_at - type: datetime - instance_name: - fields: payload.instance_name - instance_size: - fields: payload.instance_size - type: int - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - launched_at: - fields: payload.launched_at - type: datetime - name: - fields: payload.name - nova_instance_id: - fields: payload.nova_instance_id - nova_volume_id: - fields: payload.nova_volume_id - region: - fields: payload.region - resource_id: - fields: payload.instance_id - service_id: - fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id - volume_size: - fields: payload.volume_size - type: int - - event_type: trove.instance.modify_volume - traits: - availability_zone: - fields: payload.availability_zone - created_at: - fields: payload.created_at - type: datetime - instance_name: - fields: payload.instance_name - instance_size: - fields: payload.instance_size - type: int - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - launched_at: - fields: payload.launched_at - type: datetime - modify_at: - fields: payload.modify_at - type: datetime - name: - fields: payload.name - nova_instance_id: - fields: payload.nova_instance_id - nova_volume_id: - fields: payload.nova_volume_id - old_volume_size: - fields: payload.old_volume_size - type: int - region: - fields: payload.region - resource_id: - fields: payload.instance_id - service_id: - fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id - volume_size: - fields: payload.volume_size - type: int - - event_type: trove.instance.modify_flavor - traits: - availability_zone: - fields: payload.availability_zone + email: + fields: payload.email + ttl: + fields: payload.ttl + action: + fields: payload.action + name: + fields: payload.name + resource_id: + fields: payload.id created_at: fields: payload.created_at + updated_at: + fields: payload.updated_at + version: + fields: payload.version + parent_domain_id: + fields: parent_domain_id + serial: + fields: payload.serial + - event_type: dns.domain.exists + traits: + <<: *dns_domain_traits + audit_period_beginning: type: datetime - instance_name: - fields: payload.instance_name - instance_size: - fields: payload.instance_size - type: int + fields: payload.audit_period_beginning + audit_period_ending: + type: datetime + fields: payload.audit_period_ending + - event_type: trove.* + traits: &trove_base_traits + state: + fields: payload.state_description instance_type: fields: payload.instance_type + user_id: + fields: payload.user_id + resource_id: + fields: payload.instance_id instance_type_id: fields: payload.instance_type_id launched_at: - fields: payload.launched_at - type: datetime - modify_at: - fields: payload.modify_at type: datetime - name: - fields: payload.name + fields: payload.launched_at + instance_name: + fields: payload.instance_name + state: + fields: payload.state nova_instance_id: fields: payload.nova_instance_id - nova_volume_id: - fields: payload.nova_volume_id - old_instance_size: - fields: payload.old_instance_size - type: int - region: - fields: payload.region - resource_id: - fields: payload.instance_id service_id: fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id - volume_size: - fields: payload.volume_size - type: int - - event_type: trove.instance.delete - traits: - availability_zone: - fields: payload.availability_zone created_at: - fields: payload.created_at - type: datetime - deleted_at: - fields: payload.deleted_at type: datetime - instance_name: - fields: payload.instance_name + fields: payload.created_at + region: + fields: payload.region + - event_type: ['trove.instance.create', 'trove.instance.modify_volume', 'trove.instance.modify_flavor', 'trove.instance.delete'] + traits: &trove_common_traits + name: + fields: payload.name + availability_zone: + fields: payload.availability_zone instance_size: + type: int fields: payload.instance_size + volume_size: type: int - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - launched_at: - fields: payload.launched_at - type: datetime - name: - fields: payload.name - nova_instance_id: - fields: payload.nova_instance_id + fields: payload.volume_size nova_volume_id: fields: payload.nova_volume_id - region: - fields: payload.region - resource_id: - fields: payload.instance_id - service_id: - fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id - volume_size: - fields: payload.volume_size - type: int - - event_type: trove.instance.exists + - event_type: trove.instance.create traits: - audit_period_beginning: - fields: payload.audit_period_beginning + <<: [*trove_base_traits, *trove_common_traits] + - event_type: trove.instance.modify_volume + traits: + <<: [*trove_base_traits, *trove_common_traits] + old_volume_size: + type: int + fields: payload.old_volume_size + modify_at: type: datetime - audit_period_ending: - fields: payload.audit_period_ending + fields: payload.modify_at + - event_type: trove.instance.modify_flavor + traits: + <<: [*trove_base_traits, *trove_common_traits] + old_instance_size: + type: int + fields: payload.old_instance_size + modify_at: type: datetime - created_at: - fields: payload.created_at + fields: payload.modify_at + - event_type: trove.instance.delete + traits: + <<: [*trove_base_traits, *trove_common_traits] + deleted_at: type: datetime + fields: payload.deleted_at + - event_type: trove.instance.exists + traits: + <<: *trove_base_traits display_name: fields: payload.display_name - instance_name: - fields: payload.instance_name - instance_type: - fields: payload.instance_type - instance_type_id: - fields: payload.instance_type_id - launched_at: - fields: payload.launched_at + audit_period_beginning: type: datetime - nova_instance_id: - fields: payload.nova_instance_id - region: - fields: payload.region - resource_id: - fields: payload.instance_id - service_id: - fields: payload.service_id - state: - fields: payload.state - user_id: - fields: payload.user_id + fields: payload.audit_period_beginning + audit_period_ending: + type: datetime + fields: payload.audit_period_ending - event_type: profiler.* traits: - base_id: - fields: payload.base_id - db.params: - fields: payload.info.db.params - db.statement: - fields: payload.info.db.statement - host: - fields: payload.info.host - method: - fields: payload.info.request.method + project: + fields: payload.project + service: + fields: payload.service name: fields: payload.name + base_id: + fields: payload.base_id + trace_id: + fields: payload.trace_id parent_id: fields: payload.parent_id + timestamp: + fields: payload.timestamp + host: + fields: payload.info.host path: fields: payload.info.request.path - project: - fields: payload.project query: fields: payload.info.request.query + method: + fields: payload.info.request.method scheme: fields: payload.info.request.scheme - service: - fields: payload.service - timestamp: - fields: payload.timestamp - trace_id: - fields: payload.trace_id - - event_type: magnum.bay.* - traits: - action: - fields: payload.action - eventTime: - fields: payload.eventTime - eventType: - fields: payload.eventType + db.statement: + fields: payload.info.db.statement + db.params: + fields: payload.info.db.params + - event_type: 'magnum.bay.*' + traits: &magnum_bay_crud id: fields: payload.id - initiator_host_address: - fields: payload.initiator.host.address - initiator_host_agent: - fields: payload.initiator.host.agent + typeURI: + fields: payload.typeURI + eventType: + fields: payload.eventType + eventTime: + fields: payload.eventTime + action: + fields: payload.action + outcome: + fields: payload.outcome initiator_id: fields: payload.initiator.id - initiator_name: - fields: payload.initiator.name initiator_typeURI: fields: payload.initiator.typeURI - observer_id: - fields: payload.observer.id - observer_typeURI: - fields: payload.observer.typeURI - outcome: - fields: payload.outcome + initiator_name: + fields: payload.initiator.name + initiator_host_agent: + fields: payload.initiator.host.agent + initiator_host_address: + fields: payload.initiator.host.address target_id: fields: payload.target.id target_typeURI: fields: payload.target.typeURI - typeURI: - fields: payload.typeURI + observer_id: + fields: payload.observer.id + observer_typeURI: + fields: payload.observer.typeURI + meters: + metric: + # Image + - name: "image.size" + event_type: + - "image.upload" + - "image.delete" + - "image.update" + type: "gauge" + unit: B + volume: $.payload.size + resource_id: $.payload.id + project_id: $.payload.owner + - name: "image.download" + event_type: "image.send" + type: "delta" + unit: "B" + volume: $.payload.bytes_sent + resource_id: $.payload.image_id + user_id: $.payload.receiver_user_id + project_id: $.payload.receiver_tenant_id + - name: "image.serve" + event_type: "image.send" + type: "delta" + unit: "B" + volume: $.payload.bytes_sent + resource_id: $.payload.image_id + project_id: $.payload.owner_id + - name: 'volume.size' + event_type: + - 'volume.exists' + - 'volume.create.*' + - 'volume.delete.*' + - 'volume.resize.*' + - 'volume.attach.*' + - 'volume.detach.*' + - 'volume.update.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.size + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.volume_id + metadata: + display_name: $.payload.display_name + volume_type: $.payload.volume_type + - name: 'snapshot.size' + event_type: + - 'snapshot.exists' + - 'snapshot.create.*' + - 'snapshot.delete.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.volume_size + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.snapshot_id + metadata: + display_name: $.payload.display_name + - name: 'backup.size' + event_type: + - 'backup.exists' + - 'backup.create.*' + - 'backup.delete.*' + - 'backup.restore.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.size + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.backup_id + metadata: + display_name: $.payload.display_name + # Magnum + - name: $.payload.metrics.[*].name + event_type: 'magnum.bay.metrics.*' + type: 'gauge' + unit: $.payload.metrics.[*].unit + volume: $.payload.metrics.[*].value + user_id: $.payload.user_id + project_id: $.payload.project_id + resource_id: $.payload.resource_id + lookup: ['name', 'unit', 'volume'] + # Swift + - name: $.payload.measurements.[*].metric.[*].name + event_type: 'objectstore.http.request' + type: 'delta' + unit: $.payload.measurements.[*].metric.[*].unit + volume: $.payload.measurements.[*].result + resource_id: $.payload.target.id + user_id: $.payload.initiator.id + project_id: $.payload.initiator.project_id + lookup: ['name', 'unit', 'volume'] + - name: 'memory' + event_type: 'compute.instance.*' + type: 'gauge' + unit: 'MB' + volume: $.payload.memory_mb + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_metadata: $.payload.metadata + metadata: &instance_meta + host: $.payload.host + flavor_id: $.payload.instance_flavor_id + flavor_name: $.payload.instance_type + display_name: $.payload.display_name + host: $.payload.host + image_ref: $.payload.image_meta.base_image_ref + - name: 'vcpus' + event_type: 'compute.instance.*' + type: 'gauge' + unit: 'vcpu' + volume: $.payload.vcpus + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_metadata: $.payload.metadata + metadata: + <<: *instance_meta + - name: 'compute.instance.booting.time' + event_type: 'compute.instance.create.end' + type: 'gauge' + unit: 'sec' + volume: + fields: [$.payload.created_at, $.payload.launched_at] + plugin: 'timedelta' + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_metadata: $.payload.metadata + metadata: + <<: *instance_meta + - name: 'disk.root.size' + event_type: 'compute.instance.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.root_gb + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_metadata: $.payload.metadata + metadata: + <<: *instance_meta + - name: 'disk.ephemeral.size' + event_type: 'compute.instance.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.ephemeral_gb + user_id: $.payload.user_id + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_metadata: $.payload.metadata + metadata: + <<: *instance_meta + - name: 'bandwidth' + event_type: 'l3.meter' + type: 'delta' + unit: 'B' + volume: $.payload.bytes + project_id: $.payload.tenant_id + resource_id: $.payload.label_id + - name: 'compute.node.cpu.frequency' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'MHz' + volume: $.payload.metrics[?(@.name='cpu.frequency')].value + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.frequency')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.frequency')].source + - name: 'compute.node.cpu.user.time' + event_type: 'compute.metrics.update' + type: 'cumulative' + unit: 'ns' + volume: $.payload.metrics[?(@.name='cpu.user.time')].value + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.user.time')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.user.time')].source + - name: 'compute.node.cpu.kernel.time' + event_type: 'compute.metrics.update' + type: 'cumulative' + unit: 'ns' + volume: $.payload.metrics[?(@.name='cpu.kernel.time')].value + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.kernel.time')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.kernel.time')].source + - name: 'compute.node.cpu.idle.time' + event_type: 'compute.metrics.update' + type: 'cumulative' + unit: 'ns' + volume: $.payload.metrics[?(@.name='cpu.idle.time')].value + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.idle.time')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.idle.time')].source + - name: 'compute.node.cpu.iowait.time' + event_type: 'compute.metrics.update' + type: 'cumulative' + unit: 'ns' + volume: $.payload.metrics[?(@.name='cpu.iowait.time')].value + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.iowait.time')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.iowait.time')].source + - name: 'compute.node.cpu.kernel.percent' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'percent' + volume: $.payload.metrics[?(@.name='cpu.kernel.percent')].value * 100 + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.kernel.percent')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.kernel.percent')].source + - name: 'compute.node.cpu.idle.percent' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'percent' + volume: $.payload.metrics[?(@.name='cpu.idle.percent')].value * 100 + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.idle.percent')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.idle.percent')].source + - name: 'compute.node.cpu.user.percent' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'percent' + volume: $.payload.metrics[?(@.name='cpu.user.percent')].value * 100 + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.user.percent')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.user.percent')].source + - name: 'compute.node.cpu.iowait.percent' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'percent' + volume: $.payload.metrics[?(@.name='cpu.iowait.percent')].value * 100 + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.iowait.percent')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.iowait.percent')].source + - name: 'compute.node.cpu.percent' + event_type: 'compute.metrics.update' + type: 'gauge' + unit: 'percent' + volume: $.payload.metrics[?(@.name='cpu.percent')].value * 100 + resource_id: $.payload.host + "_" + $.payload.nodename + timestamp: $.payload.metrics[?(@.name='cpu.percent')].timestamp + metadata: + event_type: $.event_type + host: $.publisher_id + source: $.payload.metrics[?(@.name='cpu.percent')].source + # Identity + # NOTE(gordc): hack because jsonpath-rw-ext can't concat starting with string. + - name: $.payload.outcome - $.payload.outcome + 'identity.authenticate.' + $.payload.outcome + type: 'delta' + unit: 'user' + volume: 1 + event_type: + - 'identity.authenticate' + resource_id: $.payload.initiator.id + user_id: $.payload.initiator.id + # DNS + - name: 'dns.domain.exists' + event_type: 'dns.domain.exists' + type: 'cumulative' + unit: 's' + volume: + fields: [$.payload.audit_period_beginning, $.payload.audit_period_ending] + plugin: 'timedelta' + project_id: $.payload.tenant_id + resource_id: $.payload.id + user_id: $.ctxt.user + metadata: + status: $.payload.status + pool_id: $.payload.pool_id + host: $.publisher_id + # Trove + - name: 'trove.instance.exists' + event_type: 'trove.instance.exists' + type: 'cumulative' + unit: 's' + volume: + fields: [$.payload.audit_period_beginning, $.payload.audit_period_ending] + plugin: 'timedelta' + project_id: $.payload.tenant_id + resource_id: $.payload.instance_id + user_id: $.payload.user_id + metadata: + nova_instance_id: $.payload.nova_instance_id + state: $.payload.state + service_id: $.payload.service_id + instance_type: $.payload.instance_type + instance_type_id: $.payload.instance_type_id + # Manila + - name: 'manila.share.size' + event_type: + - 'share.create.*' + - 'share.delete.*' + - 'share.extend.*' + - 'share.shrink.*' + type: 'gauge' + unit: 'GB' + volume: $.payload.size + user_id: $.payload.user_id + project_id: $.payload.project_id + resource_id: $.payload.share_id + metadata: + name: $.payload.name + host: $.payload.host + status: $.payload.status + availability_zone: $.payload.availability_zone + protocol: $.payload.proto event_pipeline: sinks: - name: event_sink @@ -1620,6 +1553,22 @@ dependencies: service: mongodb - endpoint: internal service: metric + ipmi: + jobs: + - ceilometer-db-init-mongodb + - ceilometer-db-sync + - ceilometer-rabbit-init + - ceilometer-ks-user + - ceilometer-ks-endpoints + services: + - endpoint: internal + service: identity + - endpoint: internal + service: oslo_db + - endpoint: internal + service: mongodb + - endpoint: internal + service: metric collector: jobs: - ceilometer-db-init-mongodb @@ -1928,6 +1877,9 @@ pod: ceilometer_central: init_container: null ceilometer_central: + ceilometer_ipmi: + init_container: null + ceilometer_ipmi: ceilometer_collector: init_container: null ceilometer_collector: @@ -1996,6 +1948,13 @@ pod: limits: memory: "1024Mi" cpu: "2000m" + ipmi: + requests: + memory: "124Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m" jobs: db_init: requests: @@ -2073,6 +2032,7 @@ manifests: deployment_central: true deployment_collector: true daemonset_compute: true + daemonset_ipmi: true deployment_notification: true ingress_api: true job_bootstrap: true -- 1.8.3.1