From e21d0d668c19b88b4eecef65be1310d07df621c0 Mon Sep 17 00:00:00 2001 From: rajeshP524 Date: Thu, 4 Jul 2024 16:52:50 +0530 Subject: [PATCH] Add Collectd Monitoring Support for RHOSO Controlplane Change-Id: Id6057c27e18c691f0174552d5d958ce67bea0463 --- ansible/install/collectd-rhoso.yaml | 8 + ansible/install/collectd.yml | 5 + ansible/install/group_vars/all.yml | 4 + .../collectd-rhoso/files/collectd_deploy.yaml | 119 ++++++ .../roles/collectd-rhoso/files/entrypoint.sh | 14 + .../roles/collectd-rhoso/tasks/main.yml | 82 +++++ .../templates/controlplane.collectd.conf.j2 | 341 ++++++++++++++++++ 7 files changed, 573 insertions(+) create mode 100644 ansible/install/collectd-rhoso.yaml create mode 100644 ansible/install/roles/collectd-rhoso/files/collectd_deploy.yaml create mode 100644 ansible/install/roles/collectd-rhoso/files/entrypoint.sh create mode 100644 ansible/install/roles/collectd-rhoso/tasks/main.yml create mode 100644 ansible/install/roles/collectd-rhoso/templates/controlplane.collectd.conf.j2 diff --git a/ansible/install/collectd-rhoso.yaml b/ansible/install/collectd-rhoso.yaml new file mode 100644 index 000000000..4d8ed0be8 --- /dev/null +++ b/ansible/install/collectd-rhoso.yaml @@ -0,0 +1,8 @@ +- hosts: localhost + gather_facts: true + vars: + ansible_user: "{{ browbeat_user }}" + ansible_python_interpreter: "{{ python_interpreter }}" + roles: + - { role: collectd-rhoso } + environment: "{{proxy_env}}" diff --git a/ansible/install/collectd.yml b/ansible/install/collectd.yml index 8a2b25780..c01720389 100644 --- a/ansible/install/collectd.yml +++ b/ansible/install/collectd.yml @@ -1,6 +1,7 @@ --- - name: set fact collectd_container import_playbook: pre-collectd.yml + when: not is_rhoso_deployment - name: Run containerized collectd (Stein and greater recommended) import_playbook: collectd-container.yml @@ -9,3 +10,7 @@ - name: Run collectd installed through RPMs import_playbook: collectd-baremetal.yml when: not hostvars['undercloud']['collectd_container'] + +- name: Run collectd rhoso + import_playbook: collectd-rhoso.yaml + when: is_rhoso_deployment diff --git a/ansible/install/group_vars/all.yml b/ansible/install/group_vars/all.yml index 45be88a64..ff51209c0 100644 --- a/ansible/install/group_vars/all.yml +++ b/ansible/install/group_vars/all.yml @@ -11,6 +11,10 @@ local_remote_user: stack # Login user for the Overcloud hosts host_remote_user: heat-admin +is_rhoso_deployment: true +python_interpreter: /usr/bin/python3.6 +kubeconfig_path: /home/kni/clusterconfigs/auth/kubeconfig + # OpenStack Installer # Tripleo is the only installer supported currently tripleo: true diff --git a/ansible/install/roles/collectd-rhoso/files/collectd_deploy.yaml b/ansible/install/roles/collectd-rhoso/files/collectd_deploy.yaml new file mode 100644 index 000000000..fb937d028 --- /dev/null +++ b/ansible/install/roles/collectd-rhoso/files/collectd_deploy.yaml @@ -0,0 +1,119 @@ +apiVersion: security.openshift.io/v1 +kind: SecurityContextConstraints +metadata: + name: collectd-scc +allowHostNetwork: true +allowHostPID: true +allowPrivilegedContainer: true +allowPrivilegeEscalation: true +runAsUser: + type: RunAsAny +seLinuxContext: + type: RunAsAny +fsGroup: + type: RunAsAny +supplementalGroups: + type: RunAsAny +users: +- system:serviceaccount:ospperf:collectd-sa + +--- + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: collectd-sa + namespace: ospperf + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: pod-exec +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list"] +- apiGroups: [""] + resources: ["pods/exec"] + verbs: ["create"] + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: pod-exec-binding +subjects: +- kind: ServiceAccount + name: collectd-sa + namespace: ospperf +roleRef: + kind: ClusterRole + name: pod-exec + apiGroup: rbac.authorization.k8s.io + +--- + +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: osp-controlplane-collectd + namespace: ospperf + labels: + app: ospcp-collectd +spec: + replicas: 3 + selector: + matchLabels: + app: ospcp-collectd + template: + metadata: + labels: + app: ospcp-collectd + spec: + serviceAccountName: collectd-sa + hostNetwork: true + hostPID: true + containers: + - name: ospcp-collectd + image: quay.io/masco/collecd-rhoso-ocp + command: + - "/bin/bash" + - "/entrypoint.sh" + securityContext: + privileged: true + volumeMounts: + - name: config-files + mountPath: "/etc/config" + - name: entrypoint-script + mountPath: "/entrypoint.sh" + subPath: "entrypoint.sh" + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + envFrom: + - configMapRef: + name: collectd-env-vars + volumes: + - name: config-files + configMap: + name: collectd-configs + - name: entrypoint-script + configMap: + name: collectd-entrypoint + nodeSelector: + node-role.kubernetes.io/worker: "" + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - ospcp-collectd + topologyKey: "kubernetes.io/hostname" diff --git a/ansible/install/roles/collectd-rhoso/files/entrypoint.sh b/ansible/install/roles/collectd-rhoso/files/entrypoint.sh new file mode 100644 index 000000000..aad392642 --- /dev/null +++ b/ansible/install/roles/collectd-rhoso/files/entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Get the last segment of the pod name (assuming the pod name is stored in POD_NAME environment variable) +POD_NAME_SUFFIX=$(echo $POD_NAME | awk -F '-' '{print $NF}') + +# Determine the configuration file based on the pod name suffix +if [ "$POD_NAME_SUFFIX" = "0" ]; then + CONFIG_FILE="/etc/config/collectd-db.conf" +else + CONFIG_FILE="/etc/config/collectd.conf" +fi + +# Start the main process with the selected configuration file +exec collectd -f -C $CONFIG_FILE diff --git a/ansible/install/roles/collectd-rhoso/tasks/main.yml b/ansible/install/roles/collectd-rhoso/tasks/main.yml new file mode 100644 index 000000000..561e98fd9 --- /dev/null +++ b/ansible/install/roles/collectd-rhoso/tasks/main.yml @@ -0,0 +1,82 @@ +--- +- block: + - name: Fetch Cluster IP and Ports for openstack service + command: oc get svc openstack -n openstack -o jsonpath='{.spec.clusterIP} {.spec.ports[0].port}' + register: openstack_svc + + - name: Fetch Cluster IP and Ports for ovsdbserver-nb-0 service + command: oc get svc ovsdbserver-nb-0 -n openstack -o jsonpath='{.spec.clusterIP} {.spec.ports[0].port}' + register: ovsdbserver_nb_0_svc + + - name: Fetch Cluster IP and Ports for ovsdbserver-sb-0 service + command: oc get svc ovsdbserver-sb-0 -n openstack -o jsonpath='{.spec.clusterIP} {.spec.ports[0].port}' + register: ovsdbserver_sb_0_svc + environment: + KUBECONFIG: "{{ kubeconfig_path }}" + +- name: Parse openstack service details + set_fact: + openstack_svc_ip: "{{ openstack_svc.stdout.split(' ')[0] }}" + openstack_svc_port: "{{ openstack_svc.stdout.split(' ')[1] }}" + +- name: Parse ovsdbserver-nb-0 service details + set_fact: + ovsdbserver_nb_0_svc_ip: "{{ ovsdbserver_nb_0_svc.stdout.split(' ')[0] }}" + ovsdbserver_nb_0_svc_port: "{{ ovsdbserver_nb_0_svc.stdout.split(' ')[1] }}" + +- name: Parse ovsdbserver-sb-0 service details + set_fact: + ovsdbserver_sb_0_svc_ip: "{{ ovsdbserver_sb_0_svc.stdout.split(' ')[0] }}" + ovsdbserver_sb_0_svc_port: "{{ ovsdbserver_sb_0_svc.stdout.split(' ')[1] }}" + +- name: Create environment file with key-value pairs + copy: + dest: ~/env_file.env + content: | + COLLECTD_INTERVAL={{ collectd_interval }} + OVN_NBDB_IP={{ ovsdbserver_nb_0_svc_ip }} + OVN_NBDB_PORT={{ ovsdbserver_nb_0_svc_port }} + OVN_SBDB_IP={{ ovsdbserver_sb_0_svc_ip }} + OVN_SBDB_PORT={{ ovsdbserver_sb_0_svc_port }} + +- name: Render collectd template with db_conf + template: + src: "controlplane.collectd.conf.j2" + dest: "{{ ansible_env.HOME }}/collectd-db.conf" + vars: + db_conf: true + +- name: Render collectd template without db_conf + template: + src: "controlplane.collectd.conf.j2" + dest: "{{ ansible_env.HOME }}/collectd.conf" + vars: + db_conf: false + +- name: Create ospperf namespace + shell: + cmd: oc new-project ospperf + register: create_ns + ignore_errors: yes + environment: + KUBECONFIG: "{{ kubeconfig_path }}" + +- block: + - name: Create configmaps for collectd configs + shell: | + oc create configmap collectd-configs --from-file={{ ansible_env.HOME }}/collectd.conf --from-file={{ ansible_env.HOME }}/collectd-db.conf -n ospperf + + - name: Create collectd entrypoint configmap + shell: | + oc create configmap collectd-entrypoint --from-file="{{ role_path }}/files/entrypoint.sh" -n ospperf + + - name: Create collectd env configmap + shell: | + oc create configmap collectd-env-vars --from-env-file={{ ansible_env.HOME }}/env_file.env -n ospperf + + - name: Apply collectd deployment yaml + shell: | + oc apply -f {{ role_path }}/files/collectd_deploy.yaml -n ospperf + when: create_ns.rc == 0 + environment: + KUBECONFIG: "{{ kubeconfig_path }}" diff --git a/ansible/install/roles/collectd-rhoso/templates/controlplane.collectd.conf.j2 b/ansible/install/roles/collectd-rhoso/templates/controlplane.collectd.conf.j2 new file mode 100644 index 000000000..55f418ee9 --- /dev/null +++ b/ansible/install/roles/collectd-rhoso/templates/controlplane.collectd.conf.j2 @@ -0,0 +1,341 @@ +# Interval default is 10s +Interval {{collectd_interval}} + +# Loaded Plugins: +LoadPlugin "logfile" + + File "/var/log/collectd.log" + LogLevel "info" + PrintSeverity true + Timestamp true + + +LoadPlugin write_graphite + +LoadPlugin cpu +LoadPlugin conntrack +{% if keystone_overcloud_collectd_plugin or osp_resources_collectd_plugin %} +{% if db_conf %} +LoadPlugin dbi +{% endif %} +{% endif %} +LoadPlugin df +LoadPlugin disk +LoadPlugin exec +LoadPlugin interface +LoadPlugin irq +LoadPlugin load +LoadPlugin match_regex +LoadPlugin memory +LoadPlugin mysql +LoadPlugin numa +LoadPlugin processes + + Globals true + +LoadPlugin swap +LoadPlugin tail +LoadPlugin turbostat +LoadPlugin unixsock +LoadPlugin uptime + +# Open unix domain socket for collectdctl + + SocketFile "/var/run/collectd-unixsock" + SocketGroup "collectd" + SocketPerms "0770" + DeleteSocket true + + +PreCacheChain "PreCache" + + + + Plugin "^interface$" + PluginInstance "^tap*" + + Target "stop" + + + + Plugin "^interface$" + PluginInstance "^q.*" + + Target "stop" + + Target "return" + + +# Graphite Host Configuration +{% if collectd_graphite %} + + + Host "{{graphite_host}}" + Port "{{collectd_write_graphite_port}}" + Prefix "{{graphite_prefix}}." + Protocol "tcp" + LogSendErrors true + StoreRates true + AlwaysAppendDS false + EscapeCharacter "_" + + +{% endif %} + +{% if ovn_monitoring %} +{% if db_conf %} + + Instance "ovn_sbdb_Address_Set" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Address_Set" + + + Instance "ovn_sbdb_Port_Group" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Port_Group" + + + Instance "ovn_sbdb_Logical_Flow" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Logical_Flow" + + + Instance "ovn_sbdb_Multicast_Group" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Multicast_Group" + + + Instance "ovn_sbdb_Datapath_Binding" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Datapath_Binding" + + + Instance "ovn_sbdb_Port_Binding" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "Port_Binding" + + + Instance "ovn_sbdb_MAC_Binding" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "sb" "MAC_Binding" + + + Instance "ovn_nbdb_Logical_Switch" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Logical_Switch" + + + Instance "ovn_nbdb_Logical_Switch_Port" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Logical_Switch_Port" + + + Instance "ovn_nbdb_Address_Set" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Address_Set" + + + Instance "ovn_nbdb_Port_Group" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Port_Group" + + + Instance "ovn_nbdb_Load_Balancer" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Load_Balancer" + + + Instance "ovn_nbdb_ACL" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "ACL" + + + Instance "ovn_nbdb_Logical_Router" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Logical_Router" + + + Instance "ovn_nbdb_Logical_Router_Port" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Logical_Router_Port" + + + Instance "ovn_nbdb_Logical_Router_Static_Route" + Exec stack "/usr/local/bin/ovn_monitoring.sh" "nb" "Logical_Router_Static_Route" + +{% endif %} +{% endif %} + +{%if iostat_controller_collectd_plugin %} + + ModulePath "/usr/local/bin/" + Import "collectd_iostat_python" + + + Path "/usr/bin/iostat" + Interval {{iostat_controller_collectd_interval}} + IostatInterval 2 + Count 2 + Verbose false + NiceNames false + PluginName collectd_iostat_python + + + +{% endif %} + +{%if ovn_raft_monitoring %} +{% if db_conf %} + + ModulePath "/usr/local/bin/" + Import "collectd_ovn_raft_monitoring" + + Interval {{ovn_raft_controller_collectd_interval}} + + + +{% endif %} +{% endif %} + +# Including the version of OpenStack that the process was verified as running after +# OpenStack Installation with a comment at the end of each Process/ProcessMatch statement. +# A Minus before the version means the process was not found in that version. (Ex -10) + + # Aodh (OpenStack Installed) + ProcessMatch "aodh-evaluator" "aodh-evaluator" # 10,11,12,13 + ProcessMatch "aodh-listener" "aodh-listener" # 10,11,12,13 + ProcessMatch "aodh-notifier" "aodh-notifier" # 10,11,12,13 + ProcessMatch "aodh_wsgi" "aodh_wsgi.*-DFOREGROUND" # 11,12,13 + + # Barbican (OpenStack Installed) + ProcessMatch "barbican_wsgi" "barbican_wsgi.*-DFOREGROUND" # 13 + ProcessMatch "barbican-keystone-listener" "python.+barbican-keystone-listener" # 13 + ProcessMatch "barbican-worker" "python.+barbican-worker" # 13 + + # Ceilometer (OpenStack Installed) + ProcessMatch "ceilometer-agent-notification" "ceilometer-agent-notification" # 10,11,12,13 + ProcessMatch "ceilometer-collector" "ceilometer-collector" # 10,11,-12,-13 + ProcessMatch "ceilometer-polling" "ceilometer-polling" # 10,11,12,13 + ProcessMatch "ceilometer_wsgi" "ceilometer_wsgi.*-DFOREGROUND" # 11,-12,-13 + + # Ceph (OpenStack Installed) + # When CephStorage nodes deployed + ProcessMatch "ceph-mon" "^/usr/bin/ceph-mon" # -10,-11,-12,-13 + + # Cinder (OpenStack Installed) + ProcessMatch "cinder-api" "python.+cinder-api" # 10,-11,-12 + ProcessMatch "cinder-scheduler" "python.+cinder-scheduler" # 10,11,12,13 + ProcessMatch "cinder-volume" "python.+cinder-volume" # 10,11,12,13 + ProcessMatch "cinder_wsgi" "cinder_wsgi.*-DFOREGROUND" # 11,12,13 + + # Collectd (Browbeat Installed) + ProcessMatch "collectd" "/usr/sbin/collectd" + + # Conmon (OpenStack Installed) + ProcessMatch "conmon" "/usr/bin/conmon" # 16 + + # Docker (OpenStack Installed) + ProcessMatch "dockerd-current" "dockerd-current" # 12,13 + + # Pacemaker / Corosync (OpenStack Installed) + ProcessMatch "attrd" "/usr/libexec/pacemaker/attrd" # 10,11,12,13 + ProcessMatch "cib" "/usr/libexec/pacemaker/cib" # 10,11,12,13 + Process "corosync" # 10,11,12,13 + ProcessMatch "crmd" "/usr/libexec/pacemaker/crmd" # 10,11,12,13 + ProcessMatch "lrmd" "/usr/libexec/pacemaker/lrmd" # 10,11,12,13 + ProcessMatch "pacemakerd" "/usr/sbin/pacemakerd" # 10,11,12,13 + ProcessMatch "pcsd" "^/usr/bin/ruby.+/usr/lib/pcsd" # 10,11,12,13 + ProcessMatch "pengine" "/usr/libexec/pacemaker/pengine" # 10,11,12,13 + ProcessMatch "stonithd" "/usr/libexec/pacemaker/stonithd" # 10,11,12,13 + + # Everything Else (OpenStack Installed) + # (Processes displayed under "Everything Else" on Grafana Dashboards) + ProcessMatch "dnsmasq" "^dnsmasq.+" # 10,11,12 + ProcessMatch "haproxy" "/usr/sbin/haproxy.+/etc/haproxy/haproxy.cfg" # 10,11,12,13 + Process "httpd" # 10,11,12,13 + Process "keepalived" # 10,11,12 + Process "memcached" # 10,11,12,13 + Process "mongod" # 10,11,-12,-13 + ProcessMatch "mysqld" "/usr/libexec/mysqld" # 10,11,12,13 + ProcessMatch "rabbitmq" "/usr/lib64/erlang/erts-.+/bin/beam.smp" # 10,11,12,13 + Process "redis-server" # 10,11,12,13 + ProcessMatch "karaf" "java.+karaf" # ODL Specific + + # Glance (OpenStack Installed) + ProcessMatch "glance-api" "python.+glance-api" # 10,11,12,13 + ProcessMatch "glance-registry" "python.+glance-registry" # 10,-11,-12,-13 + + # Gnocchi (OpenStack Installed) + ProcessMatch "gnocchi-metricd-master" "gnocchi-metricd.*master" # 11,12,13 + ProcessMatch "gnocchi-metricd-scheduler" "gnocchi-metricd.*scheduler" # 10,11,-12,-13 + ProcessMatch "gnocchi-metricd-processing" "gnocchi-metricd.*processing" # 10,11,12,13 + ProcessMatch "gnocchi-metricd-reporting" "gnocchi-metricd.*reporting" # 10,11,12,13 + ProcessMatch "gnocchi-metricd-janitor" "gnocchi-metricd.*janitor" # 10,11,12,13 + ProcessMatch "gnocchi-metricd" "gnocchi-metricd " # 10(Old proctitle) + ProcessMatch "gnocchi-statsd" "python.+gnocchi-statsd" # 10,11,12,13 + ProcessMatch "gnocchi_wsgi" "gnocchi_wsgi.*-DFOREGROUND" # 11,12,13 + + # Heat (OpenStack Installed) + ProcessMatch "heat-api" "python.+heat-api --config-file" # 10,11,-12,-13 + ProcessMatch "heat-api-cfn" "python.+heat-api-cfn" # 10,11,-12,-13 + ProcessMatch "heat-api-cloudwatch" "python.+heat-api-cloudwatch" # 10,11,-12,-123 + ProcessMatch "heat_api_cfn" "heat_api_cfn_ws" # 12,13 + ProcessMatch "heat_api_cloudwatch" "heat_api_cloudw" # 12,-13 + ProcessMatch "heat_api_wsgi" "heat_api_wsgi" # 12,13 + ProcessMatch "heat-engine" "python.+heat-engine" # 10,11,12,13 + + # Horizon (OpenStack Installed) + ProcessMatch "horizon" "horizon" # 13 + + # Keystone (OpenStack Installed) + ProcessMatch "keystone-admin" "keystone-admin.*-DFOREGROUND" # 10,11,12,13 + ProcessMatch "keystone-main" "keystone-main.*-DFOREGROUND" # 10,11,12,13 + ProcessMatch "keystone" "keystone.*-DFOREGROUND" # 16 + # Starting Pike, fernet tokens are default thus token_flush not needed + ProcessMatch "keystone-token-flush" "keystone-manage.*token_flush" # 10,11,-12,-13 + + # Neutron (OpenStack Installed) + ProcessMatch "neutron-dhcp-agent" "python.+neutron-dhcp-agent" # 10,11,12,13 + ProcessMatch "neutron-l3-agent" "python.+neutron-l3-agent" # 10,11,12,13 + ProcessMatch "neutron-metadata-agent" "python.+neutron-metadata-agent" # 10,11,12,13 + ProcessMatch "neutron-ns-metadata-proxy" "python.+neutron-ns-metadata-proxy" # 10,11 + ProcessMatch "neutron-openvswitch-agent" "python.+neutron-openvswitch-agent" # 10,11,12,13 + ProcessMatch "neutron-rootwrap-daemon" "python.+neutron-rootwrap-daemon" # 10,11,12,13 + ProcessMatch "neutron-server" "python.+neutron-server" # 10,11,12,13 + ProcessMatch "neutron-keepalived-state-change" "python.+neutron-keepalived-state-change" #For HA router + + # Nova (OpenStack Installed) + ProcessMatch "nova-api" "python.+nova-api$" # 10,11,-12,-13 + ProcessMatch "nova-api-metadata" "python.+nova-api-metadata" # 12,13 + ProcessMatch "nova_api_wsgi" "nova_api_wsgi" # 12,13 + ProcessMatch "nova-conductor" "python.+nova-conductor" # 10,11,12,13 + ProcessMatch "nova-consoleauth" "python.+nova-consoleauth" # 10,11,12,13 + ProcessMatch "nova-novncproxy" "python.+nova-novncproxy" # 10,11,12,13 + ProcessMatch "nova-scheduler" "python.+nova-scheduler" # 10,11,12,13 + ProcessMatch "placement_wsgi" "placement_wsgi.*-DFOREGROUND" # 11,12,13 + ProcessMatch "nova_metadata_w" "nova_metadata_w.*-DFOREGROUND" # 16 + + # Octavia (OpenStack Installed) + ProcessMatch "octavia-housekeeping" "python.+octavia-housekeeping" # 13 + ProcessMatch "octavia-health-manager" "python.+octavia-health-manager" # 13 + ProcessMatch "octavia-api" "python.+octavia-api" # 13 + ProcessMatch "octavia-worker" "octavia-worker --config-file" # 13 + ProcessMatch "octavia_wsgi" "octavia_wsgi.*-DFOREGROUND" # 16 + + # OVS (OpenStack Installed) + ProcessMatch "ovs-vswitchd" "ovs-vswitchd.+openvswitch" # 10,11,12,13 + ProcessMatch "ovsdb-client" "ovsdb-client" # 10,11,12,13 + ProcessMatch "ovsdb-server" "ovsdb-server.+openvswitch" # 10,11,12,13 + ProcessMatch "ovsdb-server-nb" "ovsdb-server.+ovsdb-server-nb" # 16 + ProcessMatch "ovsdb-server-sb" "ovsdb-server.+ovsdb-server-sb" # 16 + ProcessMatch "ovn-northd" "ovn-northd.+ovnnb_db" # 16 + ProcessMatch "ovn-controller" "ovn-controller.+openvswitch" # 9,10 + ProcessMatch "ovn-controller-vtep" "ovn-controller-vtep.+openvswitch" # 9,10 + + # Panko (OpenStack Installed) + ProcessMatch "panko_wsgi" "panko_wsgi.*-DFOREGROUND" # 11,12,13 + + # Swift (OpenStack Installed) + ProcessMatch "swift-account-auditor" "python.+swift-account-auditor" # 10,11,12,13 + ProcessMatch "swift-account-reaper" "python.+swift-account-reaper" # 10,11,12,13 + ProcessMatch "swift-account-replicator" "python.+swift-account-replicator" # 10,11,12,13 + ProcessMatch "swift-account-server" "python.+swift-account-server" # 10,11,12,13 + ProcessMatch "swift-container-auditor" "python.+swift-container-auditor" # 10,11,12,13 + ProcessMatch "swift-container-replicator" "python.+swift-container-replicator" # 10,11,12,13 + ProcessMatch "swift-container-server" "python.+swift-container-server" # 10,11,12,13 + ProcessMatch "swift-container-updater" "python.+swift-container-updater" # 10,11,12,13 + ProcessMatch "swift-object-auditor" "python.+swift-object-auditor" # 10,11,12,13 + ProcessMatch "swift-object-expirer" "python.+swift-object-expirer" # 11,12,13 + ProcessMatch "swift-object-replicator" "python.+swift-object-replicator" # 10,11,12,13 + ProcessMatch "swift-object-server" "python.+swift-object-server" # 10,11,12,13 + ProcessMatch "swift-object-updater" "python.+swift-object-updater" # 10,11,12,13 + ProcessMatch "swift-proxy-server" "python.+swift-proxy-server" # 10,11,12,13 + + +# Include other collectd configuration files +Include "/etc/collectd.d"