Skip to content

Commit ba28b84

Browse files
authored
Merge pull request #227 from stfc/kibana_logstash
Add Kibana and Logstash to ChatOps
2 parents 4922f94 + d08dd59 commit ba28b84

File tree

9 files changed

+208
-1
lines changed

9 files changed

+208
-1
lines changed

chatops_deployment/ansible/group_vars/monitoring/vars.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
---
12
grafana_client_id: "{{ vault_grafana_client_id }}"
23
grafana_client_secret: "{{ vault_grafana_client_secret }}"
34
grafana_admin_password: "{{ vault_grafana_admin_password }}"
@@ -8,3 +9,5 @@ alertmanager_password: "{{ vault_alertmanager_password }}"
89
alertmanager_version: "0.28.1"
910
prometheus_version: "3.2.1"
1011
elastic_password: "{{ vault_elastic_password }}"
12+
kibana_system_password: "{{ vault_kibana_system_password }}"
13+
logstash_system_password: "{{ vault_logstash_system_password }}"

chatops_deployment/ansible/roles/elastic/handlers/main.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,15 @@
44
ansible.builtin.systemd_service:
55
name: elasticsearch.service
66
state: restarted
7+
8+
- name: Restart Kibana
9+
become: true
10+
ansible.builtin.systemd_service:
11+
name: kibana.service
12+
state: restarted
13+
14+
- name: Restart Logstash
15+
become: true
16+
ansible.builtin.systemd_service:
17+
name: logstash.service
18+
state: restarted
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
- name: Install prerequisite packages
3+
become: true
4+
ansible.builtin.apt:
5+
pkg:
6+
- apt-transport-https
7+
- software-properties-common
8+
- wget
9+
update_cache: true
10+
11+
- name: Create key directory
12+
become: true
13+
ansible.builtin.file:
14+
path: /etc/apt/keyrings
15+
state: directory
16+
mode: "0755"
17+
18+
- name: Add Elasticsearch key and repository to apt
19+
become: true
20+
block:
21+
- name: Add key
22+
ansible.builtin.get_url:
23+
url: https://artifacts.elastic.co/GPG-KEY-elasticsearch
24+
dest: /etc/apt/keyrings/elasticsearch.asc
25+
mode: "0755"
26+
27+
- name: Add repository
28+
ansible.builtin.apt_repository:
29+
repo: "deb [signed-by=/etc/apt/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/9.x/apt stable main"
30+
state: present
31+
32+
- name: Install Kibana
33+
become: true
34+
ansible.builtin.apt:
35+
name: kibana
36+
state: latest # noqa: package-latest
37+
update_cache: true
38+
39+
- name: Template kibana config
40+
become: true
41+
ansible.builtin.template:
42+
src: kibana.yml.j2
43+
dest: "/etc/kibana/kibana.yml"
44+
owner: root
45+
group: kibana
46+
mode: "0640"
47+
notify:
48+
- Restart Kibana
49+
50+
- name: Copy certificate and key
51+
become: true
52+
ansible.builtin.copy:
53+
src: "./SSL/{{ item }}"
54+
dest: "/etc/kibana/{{ item }}"
55+
owner: root
56+
group: kibana
57+
mode: "0440"
58+
notify:
59+
- Restart Kibana
60+
loop:
61+
- kibana.key
62+
- kibana.crt
63+
- elasticsearch.crt
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
- name: Install prerequisite packages
3+
become: true
4+
ansible.builtin.apt:
5+
pkg:
6+
- apt-transport-https
7+
- software-properties-common
8+
- wget
9+
update_cache: true
10+
11+
- name: Create key directory
12+
become: true
13+
ansible.builtin.file:
14+
path: /etc/apt/keyrings
15+
state: directory
16+
mode: "0755"
17+
18+
- name: Add Elasticsearch key and repository to apt
19+
become: true
20+
block:
21+
- name: Add key
22+
ansible.builtin.get_url:
23+
url: https://artifacts.elastic.co/GPG-KEY-elasticsearch
24+
dest: /etc/apt/keyrings/elasticsearch.asc
25+
mode: "0755"
26+
27+
- name: Add repository
28+
ansible.builtin.apt_repository:
29+
repo: "deb [signed-by=/etc/apt/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/9.x/apt stable main"
30+
state: present
31+
32+
- name: Install Logstash
33+
become: true
34+
ansible.builtin.apt:
35+
name: logstash
36+
state: latest # noqa: package-latest
37+
update_cache: true
38+
39+
- name: Template logstash config
40+
become: true
41+
ansible.builtin.template:
42+
src: logstash.conf.j2
43+
dest: "/etc/logstash/logstash.conf"
44+
owner: root
45+
group: logstash
46+
mode: "0640"
47+
notify:
48+
- Restart Logstash
49+
50+
- name: Copy certificate and key
51+
become: true
52+
ansible.builtin.copy:
53+
src: "./{{ env }}_ssl/{{ item }}"
54+
dest: "/etc/logstash/{{ item }}"
55+
owner: root
56+
group: logstash
57+
mode: "0440"
58+
notify:
59+
- Restart Logstash
60+
loop:
61+
- logstash.key
62+
- logstash.crt
63+
- elasticsearch.crt

chatops_deployment/ansible/roles/elastic/tasks/main.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,13 @@
33
ansible.builtin.import_tasks: elasticsearch.yml
44
tags:
55
- elasticsearch
6+
7+
- name: Install Kibana
8+
ansible.builtin.import_tasks: kibana.yml
9+
tags:
10+
- kibana
11+
12+
- name: Install Logstash
13+
ansible.builtin.import_tasks: logstash.yml
14+
tags:
15+
- logstash
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
server.host: {{ inventory_hostname }}
2+
server.port: 5601
3+
server.publicBaseUrl: https://kibana.{{ domain }}:443
4+
elasticsearch.hosts: ["https://localhost:9200"]
5+
elasticsearch.username: kibana_system
6+
elasticsearch.password: "{{ kibana_system_password }}"
7+
8+
server.ssl:
9+
enabled: true
10+
key: /etc/kibana/kibana.key
11+
certificate: /etc/kibana/kibana.crt
12+
elasticsearch.ssl.certificateAuthorities: /etc/kibana/elasticsearch.crt
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
input {
2+
beats {
3+
port => 5044
4+
host => "0.0.0.0"
5+
ssl_enabled => true
6+
ssl_certificate => "/etc/logstash/logstash.crt"
7+
ssl_key => "/etc/logstash/logstash.key"
8+
}
9+
}
10+
11+
filter {
12+
if [service][name] == "chatops" {
13+
grok {
14+
match => {
15+
"message" => [
16+
"\[%{TIMESTAMP_ISO8601:timestamp}\] %{LOGLEVEL:level} in %{DATA:module}: %{GREEDYDATA:log_message}"
17+
]
18+
}
19+
}
20+
21+
date {
22+
match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
23+
target => "@timestamp"
24+
remove_field => ["timestamp"]
25+
}
26+
}
27+
}
28+
29+
output {
30+
elasticsearch {
31+
hosts => ["https://127.0.0.1:9200"]
32+
user => "elastic"
33+
password => "{{ elastic_password }}"
34+
ssl_enabled => true
35+
ssl_certificate_authorities => "/etc/logstash/elasticsearch.crt"
36+
}
37+
}

chatops_deployment/ansible/roles/haproxy/tasks/certbot.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
become: true
4242
ansible.builtin.command: |
4343
certbot certonly --standalone --non-interactive --agree-tos --expand --domains \
44-
{{ domain }},chatops.{{ domain }},prometheus.{{ domain }},grafana.{{ domain }},alertmanager.{{ domain }} \
44+
{{ domain }},chatops.{{ domain }},prometheus.{{ domain }},grafana.{{ domain }},alertmanager.{{ domain }},kibana.{{ domain }} \
4545
4646
register: generate_cert
4747
changed_when: generate_cert.rc == 0

chatops_deployment/ansible/roles/haproxy/templates/haproxy.cfg.j2

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@ acl grafana hdr_sub(host) -i grafana.{{ domain }}
4747
acl prometheus hdr_sub(host) -i prometheus.{{ domain }}
4848
acl alertmanager hdr_sub(host) -i alertmanager.{{ domain }}
4949
acl chatops_sub hdr_sub(host) -i chatops.{{ domain }}
50+
acl kibana hdr_sub(host) -i kibana.{{ domain }}
5051
acl chatops hdr_sub(host) -i {{ domain }}
5152

5253
use_backend GRAFANA if grafana
5354
use_backend PROMETHEUS if prometheus
55+
use_backend KIBANA if kibana
5456
use_backend ALERTMANAGER if alertmanager
5557
use_backend CHATOPS if chatops || chatops_sub
5658

@@ -89,3 +91,8 @@ server chatops_{{ loop.index }} {{ address }}:3000 check backup
8991
server chatops_{{ loop.index }} {{ address }}:3000 check
9092
{% endif %}
9193
{% endfor %}
94+
95+
backend KIBANA
96+
{% for address in groups['elastic'] %}
97+
server elastic_{{ loop.index }} {{ address }}:5601 check
98+
{% endfor %}

0 commit comments

Comments
 (0)