Skip to content

Commit 24da43a

Browse files
committed
Remove Monasca Log Transformer
Historically Monasca Log Transformer has been for log standardisation and processing. For example, logs from different sources may use slightly different error levels such as WARN, 5, or WARNING. Monasca Log Transformer is a place where these could be 'squashed' into a single error level to simplify log searches based on labels such as these. However, in Kolla Ansible, we do this processing in Fluentd so that the simpler Fluentd -> Elastic -> Kibana pipeline also benefits. This helps to avoid spreading out log parsing configuration over many services, with the Fluentd Monasca output plugin being yet another potential place for processing (which should be avoided). It therefore makes sense to remove this service entirely, and squash any existing configuration which can't be moved to Fluentd into the Log Perister service. I.e. by removing this pipeline, we don't loose any functionality, we encourage log processing to take place in Fluentd, or at least outside of Monasca, and we make significant gains in efficiency by removing a topic from Kafka which contains a copy of all logs in transit. Finally, users forwarding logs from outside the control plane, eg. from tenant instances, should be encouraged to process the logs at the point of sending using whichever framework they are forwarding them with. This makes sense, because all Logstash configuration in Monasca is only accessible by control plane admins. A user can't typically do any processing inside Monasca, with or without this change. Change-Id: I65c76d0d1cd488725e4233b7e75a11d03866095c
1 parent 4e5a688 commit 24da43a

File tree

13 files changed

+144
-116
lines changed

13 files changed

+144
-116
lines changed

ansible/monasca_cleanup.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
- name: Cleanup unused Monasca services
3+
hosts:
4+
- monasca-api
5+
- monasca-grafana
6+
- monasca-log-transformer
7+
- monasca-log-persister
8+
- monasca-log-metrics
9+
- monasca-thresh
10+
- monasca-notification
11+
- monasca-persister
12+
roles:
13+
- { role: monasca,
14+
tags: monasca }

ansible/roles/monasca/defaults/main.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ monasca_services:
2020
mode: "http"
2121
external: true
2222
port: "{{ monasca_api_port }}"
23+
# NOTE(dszumski): We can remove log_transformer and all other references after the
24+
# Wallaby release
2325
monasca-log-transformer:
2426
container_name: monasca_log_transformer
2527
group: monasca-log-transformer
26-
enabled: true
28+
enabled: false
2729
image: "{{ monasca_logstash_image_full }}"
2830
volumes: "{{ monasca_log_transformer_default_volumes + monasca_log_transformer_extra_volumes }}"
2931
dimensions: "{{ monasca_log_transformer_dimensions }}"
@@ -175,7 +177,7 @@ monasca_all_topics:
175177
- name: "{{ monasca_transformed_logs_topic }}"
176178
partitions: "{{ monasca_default_topic_partitions }}"
177179
replication_factor: "{{ monasca_default_topic_replication_factor }}"
178-
enabled: True
180+
enabled: False
179181
- name: "{{ monasca_events_topic }}"
180182
partitions: "{{ monasca_default_topic_partitions }}"
181183
replication_factor: "{{ monasca_default_topic_replication_factor }}"

ansible/roles/monasca/handlers/main.yml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,6 @@
1414
when:
1515
- kolla_action != "config"
1616

17-
- name: Restart monasca-log-transformer container
18-
vars:
19-
service_name: "monasca-log-transformer"
20-
service: "{{ monasca_services[service_name] }}"
21-
become: true
22-
kolla_docker:
23-
action: "recreate_or_restart_container"
24-
common_options: "{{ docker_common_options }}"
25-
name: "{{ service.container_name }}"
26-
image: "{{ service.image }}"
27-
volumes: "{{ service.volumes }}"
28-
dimensions: "{{ service.dimensions }}"
29-
when:
30-
- kolla_action != "config"
31-
3217
- name: Restart monasca-log-persister container
3318
vars:
3419
service_name: "monasca-log-persister"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
- name: Stop and remove containers for disabled monasca services
3+
become: true
4+
kolla_docker:
5+
action: "stop_and_remove_container"
6+
name: "{{ item.value.container_name }}"
7+
when:
8+
- inventory_hostname in groups[item.value.group]
9+
- not item.value.enabled | bool
10+
with_dict: "{{ monasca_services }}"
11+
12+
- name: Removing config for any disabled services
13+
file:
14+
path: "{{ node_config_directory }}/{{ item.key }}"
15+
state: "absent"
16+
become: true
17+
when:
18+
- inventory_hostname in groups[item.value.group]
19+
- not item.value.enabled | bool
20+
with_dict: "{{ monasca_services }}"
21+
22+
# NOTE(dszumski): Docker volume removal is currently a manual procedure

ansible/roles/monasca/tasks/config.yml

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -160,29 +160,11 @@
160160
notify:
161161
- Restart monasca-api container
162162

163-
- name: Copying over monasca-log-transformer config
164-
vars:
165-
service: "{{ monasca_services['monasca-log-transformer'] }}"
166-
template:
167-
src: "{{ item }}"
168-
dest: "{{ node_config_directory }}/monasca-log-transformer/log-transformer.conf"
169-
mode: "0660"
170-
become: true
171-
with_first_found:
172-
- "{{ node_custom_config }}/monasca/{{ inventory_hostname }}/log-transformer.conf"
173-
- "{{ node_custom_config }}/monasca/log-transformer.conf"
174-
- "{{ role_path }}/templates/monasca-log-transformer/log-transformer.conf.j2"
175-
when:
176-
- inventory_hostname in groups[service['group']]
177-
- service.enabled | bool
178-
notify:
179-
- Restart monasca-log-transformer container
180-
181163
- name: Ensuring logstash patterns folder exists
182164
vars:
183-
service: "{{ monasca_services['monasca-log-transformer'] }}"
165+
service: "{{ monasca_services['monasca-log-persister'] }}"
184166
file:
185-
path: "{{ node_config_directory }}/monasca-log-transformer/logstash_patterns"
167+
path: "{{ node_config_directory }}/monasca-log-persister/logstash_patterns"
186168
state: "directory"
187169
mode: "0770"
188170
become: true
@@ -200,18 +182,18 @@
200182

201183
- name: Copying over custom logstash patterns
202184
vars:
203-
service: "{{ monasca_services['monasca-log-transformer'] }}"
185+
service: "{{ monasca_services['monasca-log-persister'] }}"
204186
template:
205187
src: "{{ item.path }}"
206-
dest: "{{ node_config_directory }}/monasca-log-transformer/logstash_patterns/{{ item.path | basename }}"
188+
dest: "{{ node_config_directory }}/monasca-log-persister/logstash_patterns/{{ item.path | basename }}"
207189
mode: "0660"
208190
with_items: "{{ monasca_custom_logstash_patterns.files }}"
209191
become: true
210192
when:
211193
- inventory_hostname in groups[service['group']]
212194
- service.enabled | bool
213195
notify:
214-
- Restart monasca-log-transformer container
196+
- Restart monasca-log-persister container
215197

216198
- name: Copying over monasca-log-persister config
217199
vars:

ansible/roles/monasca/tasks/upgrade.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
- import_tasks: config.yml
1616

17+
- import_tasks: cleanup.yml
18+
1719
- import_tasks: check-containers.yml
1820

1921
# NOTE(dszumski): We don't want old Grafana instances running after

ansible/roles/monasca/templates/monasca-log-metrics/log-metrics.conf.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
input {
1111
kafka {
1212
bootstrap_servers => "{{ monasca_kafka_servers }}"
13-
topics => ["{{ monasca_transformed_logs_topic }}"]
13+
topics => ["{{ monasca_raw_logs_topic }}"]
1414
group_id => "log_metrics"
1515
consumer_threads => "{{ monasca_log_pipeline_threads }}"
1616
codec => json

ansible/roles/monasca/templates/monasca-log-persister/log-persister.conf.j2

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,41 @@
1-
# Persist transformed logs to Elasticsearch
1+
# Persist logs to Elasticsearch.
22

33
input {
44
kafka {
55
bootstrap_servers => "{{ monasca_kafka_servers }}"
6-
topics => ["{{ monasca_transformed_logs_topic }}"]
6+
topics => ["{{ monasca_raw_logs_topic }}"]
77
group_id => "log_persister"
88
consumer_threads => "{{ monasca_log_pipeline_threads }}"
99
codec => json
1010
}
1111
}
1212

13+
filter {
14+
# Update the timestamp of the event based on the time in the message.
15+
date {
16+
match => [ "[log][dimensions][timestamp]", "yyyy-MM-dd HH:mm:ss Z", "ISO8601"]
17+
remove_field => [ "[log][dimensions][timestamp]", "[log][dimensions][Timestamp]" ]
18+
}
19+
20+
# Monasca Log API adds a timestamp when it processes a log entry. This
21+
# timestamp needs to be converted from seconds since the epoch for
22+
# Elasticsearch to parse it correctly. Here we make that conversion.
23+
date {
24+
match => ["creation_time", "UNIX"]
25+
target => "creation_time"
26+
}
27+
28+
# OpenStack log levels are uppercase, and syslog are lowercase.
29+
# Furthermore, syslog has more log levels that OpenStack. To avoid
30+
# mapping syslog log levels to OpenStack log levels, we standardise
31+
# on the syslog style here.
32+
if [log][dimensions][log_level] {
33+
mutate {
34+
lowercase => [ "[log][dimensions][log_level]" ]
35+
}
36+
}
37+
}
38+
1339
output {
1440
elasticsearch {
1541
index => "monasca-%{[meta][tenantId]}-%{+YYYY.MM.dd}"

ansible/roles/monasca/templates/monasca-log-transformer/log-transformer.conf.j2

Lines changed: 0 additions & 46 deletions
This file was deleted.

ansible/roles/monasca/templates/monasca-log-transformer/monasca-log-transformer.json.j2

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)