From b97832dd4ffa5fba06c38afb44cce522dbafefdc Mon Sep 17 00:00:00 2001 From: Michal Nasiadka <mnasiadka@gmail.com> Date: Thu, 6 Aug 2020 12:38:36 +0200 Subject: [PATCH] Refactor fluentd syslog logging Co-Authored-By: Mark Goddard <mark@stackhpc.com> Change-Id: I75ca59d981bcd2dd51faa296ab0b4223a891f5cb --- ansible/roles/common/defaults/main.yml | 24 ++ .../conf/filter/00-record_transformer.conf.j2 | 27 +-- .../templates/conf/output/00-local.conf.j2 | 212 +----------------- .../roles/common/templates/fluentd.json.j2 | 27 +-- 4 files changed, 40 insertions(+), 250 deletions(-) diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml index f99da8609d..b7239d4719 100644 --- a/ansible/roles/common/defaults/main.yml +++ b/ansible/roles/common/defaults/main.yml @@ -71,6 +71,30 @@ syslog_haproxy_facility: "local1" syslog_glance_tls_proxy_facility: "local2" syslog_neutron_tls_proxy_facility: "local4" +syslog_facilities: + - name: "swift" + enabled: "{{ enable_swift | bool and (inventory_hostname in groups['swift-proxy-server'] or inventory_hostname in groups['swift-account-server'] or inventory_hostname in groups['swift-container-server'] or inventory_hostname in groups['swift-object-server']) }}" + facility: "{{ syslog_swift_facility }}" + logdir: "swift" + logfile: "swift_latest" + output_tag: true + output_time: true + - name: "haproxy" + enabled: "{{ enable_haproxy | bool and inventory_hostname in groups['loadbalancer'] }}" + facility: "{{ syslog_haproxy_facility }}" + logdir: "haproxy" + logfile: "haproxy_latest" + - name: "glance_tls_proxy" + enabled: "{{ glance_enable_tls_backend | bool and inventory_hostname in groups['glance-api'] }}" + facility: "{{ syslog_glance_tls_proxy_facility }}" + logdir: "glance-tls-proxy" + logfile: "glance-tls-proxy" + - name: "neutron_tls_proxy" + enabled: "{{ neutron_enable_tls_backend | bool and inventory_hostname in groups['neutron-server'] }}" + facility: "{{ syslog_neutron_tls_proxy_facility }}" + logdir: "neutron-tls-proxy" + logfile: "neutron-tls-proxy" + kolla_toolbox_default_volumes: - "{{ node_config_directory }}/kolla-toolbox/:{{ container_config_directory }}/:ro" - "/etc/localtime:/etc/localtime:ro" diff --git a/ansible/roles/common/templates/conf/filter/00-record_transformer.conf.j2 b/ansible/roles/common/templates/conf/filter/00-record_transformer.conf.j2 index 2d5fef5bbd..723a37dfc8 100644 --- a/ansible/roles/common/templates/conf/filter/00-record_transformer.conf.j2 +++ b/ansible/roles/common/templates/conf/filter/00-record_transformer.conf.j2 @@ -22,33 +22,14 @@ </record> </filter> -<filter syslog.local0.**> +{% for item in syslog_facilities | selectattr('enabled') %} +<filter syslog.{{ item.facility }}.**> @type record_transformer <record> - programname swift - </record> -</filter> - -<filter syslog.local1.**> - @type record_transformer - <record> - programname haproxy - </record> -</filter> - -<filter syslog.{{ syslog_glance_tls_proxy_facility }}.**> - @type record_transformer - <record> - programname glance-tls-proxy - </record> -</filter> - -<filter syslog.{{ syslog_neutron_tls_proxy_facility }}.**> - @type record_transformer - <record> - programname neutron-tls-proxy + programname {{ item.logdir }} </record> </filter> +{% endfor %} # Rename internal Fluent message field to match other logs. This removes # all other fields by default, including the original message field. This is diff --git a/ansible/roles/common/templates/conf/output/00-local.conf.j2 b/ansible/roles/common/templates/conf/output/00-local.conf.j2 index 4b8067e0db..33e821ac74 100644 --- a/ansible/roles/common/templates/conf/output/00-local.conf.j2 +++ b/ansible/roles/common/templates/conf/output/00-local.conf.j2 @@ -1,81 +1,17 @@ -{% if enable_swift | bool and (inventory_hostname in groups['swift-proxy-server'] or inventory_hostname in groups['swift-account-server'] or inventory_hostname in groups['swift-container-server'] or inventory_hostname in groups['swift-object-server']) %} -<match syslog.{{ syslog_swift_facility }}.**> +{% for item in syslog_facilities | selectattr('enabled') %} +<match syslog.{{ item.facility }}.**> @type copy <store> @type file - path /var/log/kolla/swift/swift_latest + path /var/log/kolla/{{ item.logdir }}/{{ item.logfile }} append true # Disable timestamp in filename for logs <buffer []> - path /var/log/kolla/swift/swift_latest.*.buffer + path /var/log/kolla/{{ item.logdir }}/{{ item.logfile }}.*.buffer </buffer> - </store> -{% if log_direct_to_elasticsearch %} - <store> - @type elasticsearch - host {{ elasticsearch_address }} - port {{ elasticsearch_port }} - scheme {{ fluentd_elasticsearch_scheme }} -{% if fluentd_elasticsearch_path != '' %} - path {{ fluentd_elasticsearch_path }} -{% endif %} -{% if fluentd_elasticsearch_scheme == 'https' %} - ssl_version {{ fluentd_elasticsearch_ssl_version }} - ssl_verify {{ fluentd_elasticsearch_ssl_verify }} -{% if fluentd_elasticsearch_cacert | length > 0 %} - ca_file {{ fluentd_elasticsearch_cacert }} -{% endif %} -{% endif %} -{% if fluentd_elasticsearch_user != '' and fluentd_elasticsearch_password != ''%} - user {{ fluentd_elasticsearch_user }} - password {{ fluentd_elasticsearch_password }} -{% endif %} - logstash_format true - logstash_prefix {{ kibana_log_prefix }} - flush_interval 15s - reconnect_on_error true - buffer_type file - buffer_path /var/lib/fluentd/data/elasticsearch.buffer/{{ syslog_swift_facility }}.* - suppress_type_name true - </store> -{% elif enable_monasca | bool and monasca_ingest_control_plane_logs | bool %} - <store> - @type monasca - keystone_url {{ keystone_internal_url }} - monasca_api {{ monasca_log_api_internal_endpoint }} - monasca_api_version v2.0 - username {{ monasca_agent_user }} - password {{ monasca_agent_password }} - domain_id default - project_name {{ monasca_control_plane_project }} - message_field_name Payload - buffer_type file - buffer_path /var/lib/fluentd/data/monasca.buffer/{{ syslog_swift_facility }}.* - max_retry_wait 1800s - disable_retry_limit true - <buffer> - chunk_limit_size 8m - </buffer> - </store> -{% endif %} -</match> -{% endif %} - -{% if enable_haproxy | bool and inventory_hostname in groups['loadbalancer'] %} -<match syslog.{{ syslog_haproxy_facility }}.**> - @type copy - <store> - @type file - path /var/log/kolla/haproxy/haproxy_latest - append true - # Disable timestamp in filename for logs - <buffer []> - path /var/log/kolla/haproxy/haproxy_latest.*.buffer - </buffer> - # Don't prepend syslog tag or timestamp to log output <format> - output_tag false - output_time false + output_tag {{ item.output_tag | default(false) | lower }} + output_time {{ item.output_time | default(false) | lower }} </format> </store> {% if log_direct_to_elasticsearch %} @@ -103,7 +39,7 @@ flush_interval 15s reconnect_on_error true buffer_type file - buffer_path /var/lib/fluentd/data/elasticsearch.buffer/{{ syslog_haproxy_facility }}.* + buffer_path /var/lib/fluentd/data/elasticsearch.buffer/{{ item.facility }}.* suppress_type_name true </store> {% elif enable_monasca | bool and monasca_ingest_control_plane_logs | bool %} @@ -118,7 +54,7 @@ project_name {{ monasca_control_plane_project }} message_field_name Payload buffer_type file - buffer_path /var/lib/fluentd/data/monasca.buffer/{{ syslog_haproxy_facility }}.* + buffer_path /var/lib/fluentd/data/monasca.buffer/{{ item.facility }}.* max_retry_wait 1800s disable_retry_limit true <buffer> @@ -127,134 +63,4 @@ </store> {% endif %} </match> -{% endif %} - -{% if glance_enable_tls_backend | bool %} -<match syslog.{{ syslog_glance_tls_proxy_facility }}.**> - @type copy - <store> - @type file - path /var/log/kolla/glance-tls-proxy/glance-tls-proxy - append true - # Disable timestamp in filename for logs - <buffer []> - path /var/log/kolla/glance-tls-proxy/glance-tls-proxy.*.buffer - </buffer> - # Don't prepend syslog tag or timestamp to log output - <format> - output_tag false - output_time false - </format> - </store> -{% if log_direct_to_elasticsearch %} - <store> - @type elasticsearch - host {{ elasticsearch_address }} - port {{ elasticsearch_port }} - scheme {{ fluentd_elasticsearch_scheme }} -{% if fluentd_elasticsearch_path != '' %} - path {{ fluentd_elasticsearch_path }} -{% endif %} -{% if fluentd_elasticsearch_scheme == 'https' %} - ssl_version {{ fluentd_elasticsearch_ssl_version }} - ssl_verify {{ fluentd_elasticsearch_ssl_verify }} -{% endif %} -{% if fluentd_elasticsearch_user != '' and fluentd_elasticsearch_password != ''%} - user {{ fluentd_elasticsearch_user }} - password {{ fluentd_elasticsearch_password }} -{% endif %} - logstash_format true - logstash_prefix {{ kibana_log_prefix }} - flush_interval 15s - reconnect_on_error true - buffer_type file - buffer_path /var/lib/fluentd/data/elasticsearch.buffer/{{ syslog_glance_tls_proxy_facility }}.* - suppress_type_name true - </store> -{% elif enable_monasca | bool and monasca_ingest_control_plane_logs | bool %} - <store> - @type monasca - keystone_url {{ keystone_internal_url }} - monasca_api {{ monasca_log_api_internal_endpoint }} - monasca_api_version v2.0 - username {{ monasca_agent_user }} - password {{ monasca_agent_password }} - domain_id default - project_name {{ monasca_control_plane_project }} - message_field_name Payload - buffer_type file - buffer_path /var/lib/fluentd/data/monasca.buffer/{{ syslog_glance_tls_proxy_facility }}.* - max_retry_wait 1800s - disable_retry_limit true - <buffer> - chunk_limit_size 8m - </buffer> - </store> -{% endif %} -</match> -{% endif %} - -{% if neutron_enable_tls_backend | bool %} -<match syslog.{{ syslog_neutron_tls_proxy_facility }}.**> - @type copy - <store> - @type file - path /var/log/kolla/neutron-tls-proxy/neutron-tls-proxy - append true - # Disable timestamp in filename for logs - <buffer []> - path /var/log/kolla/neutron-tls-proxy/neutron-tls-proxy.*.buffer - </buffer> - # Don't prepend syslog tag or timestamp to log output - <format> - output_tag false - output_time false - </format> - </store> -{% if log_direct_to_elasticsearch %} - <store> - @type elasticsearch - host {{ elasticsearch_address }} - port {{ elasticsearch_port }} - scheme {{ fluentd_elasticsearch_scheme }} -{% if fluentd_elasticsearch_path != '' %} - path {{ fluentd_elasticsearch_path }} -{% endif %} -{% if fluentd_elasticsearch_scheme == 'https' %} - ssl_version {{ fluentd_elasticsearch_ssl_version }} - ssl_verify {{ fluentd_elasticsearch_ssl_verify }} -{% endif %} -{% if fluentd_elasticsearch_user != '' and fluentd_elasticsearch_password != ''%} - user {{ fluentd_elasticsearch_user }} - password {{ fluentd_elasticsearch_password }} -{% endif %} - logstash_format true - logstash_prefix {{ kibana_log_prefix }} - flush_interval 15s - reconnect_on_error true - buffer_type file - buffer_path /var/lib/fluentd/data/elasticsearch.buffer/{{ syslog_neutron_tls_proxy_facility }}.* - suppress_type_name true - </store> -{% elif enable_monasca | bool and monasca_ingest_control_plane_logs | bool %} - <store> - @type monasca - keystone_url {{ keystone_internal_url }} - monasca_api {{ monasca_log_api_internal_endpoint }} - monasca_api_version v2.0 - username {{ monasca_agent_user }} - password {{ monasca_agent_password }} - domain_id default - project_name {{ monasca_control_plane_project }} - message_field_name Payload - buffer_type file - buffer_path /var/lib/fluentd/data/monasca.buffer/{{ syslog_neutron_tls_proxy_facility }}.* - max_retry_wait 1800s - disable_retry_limit true - <buffer> - chunk_limit_size 8m - </buffer> - </store> -{% endif %} -</match> -{% endif %} +{% endfor %} diff --git a/ansible/roles/common/templates/fluentd.json.j2 b/ansible/roles/common/templates/fluentd.json.j2 index 6c091e09a0..712182c14a 100644 --- a/ansible/roles/common/templates/fluentd.json.j2 +++ b/ansible/roles/common/templates/fluentd.json.j2 @@ -19,34 +19,13 @@ "owner": "{{ fluentd_user }}:{{ fluentd_user }}", "recurse": true }, -{% if enable_haproxy | bool and inventory_hostname in groups['loadbalancer'] %} +{% for facility in syslog_facilities | selectattr('enabled') %} { - "path": "/var/log/kolla/haproxy", + "path": "/var/log/kolla/{{ facility.logdir }}", "owner": "{{ fluentd_user }}:{{ fluentd_user }}", "recurse": true }, -{% endif %} -{% if glance_enable_tls_backend | bool %} - { - "path": "/var/log/kolla/glance-tls-proxy", - "owner": "{{ fluentd_user }}:{{ fluentd_user }}", - "recurse": true - }, -{% endif %} -{% if neutron_enable_tls_backend | bool %} - { - "path": "/var/log/kolla/neutron-tls-proxy", - "owner": "{{ fluentd_user }}:{{ fluentd_user }}", - "recurse": true - }, -{% endif %} -{% if enable_swift | bool and (inventory_hostname in groups['swift-proxy-server'] or inventory_hostname in groups['swift-account-server'] or inventory_hostname in groups['swift-container-server'] or inventory_hostname in groups['swift-object-server']) %} - { - "path": "/var/log/kolla/swift", - "owner": "{{ fluentd_user }}:{{ fluentd_user }}", - "recurse": true - }, -{% endif %} +{% endfor %} { "path": "/var/lib/fluentd/data", "owner": "{{ fluentd_user }}:{{ fluentd_user }}",