v8.0.2: Remove Grafana integration

Deleted the Grafana role from Ansible playbooks and related references in various files. This includes updates to HTML templates, route definitions, and database entries to ensure no remnants of Grafana configuration remain.
pull/399/head
Aidaho 2024-09-17 08:52:36 +03:00
parent 94e7a23383
commit 1dbbf54986
14 changed files with 24 additions and 179 deletions

View File

@ -12,7 +12,6 @@ Web interface (user-friendly web GUI, alerting, monitoring and secure) for manag
# Features:
1. Installing and updating HAProxy, Nginx, Apache and Keepalived with Roxy-WI as a system service
2. Installing and updating HAProxy and Nginx with Roxy-WI as a Docker service
3. Installing and updating Grafana, Prometheus servers with Roxy-WI
4. Installing and updating HAProxy, Nginx, Apache, Keepalived and Node exporters with Roxy-WI
6. Downloading, updating and formatting GeoIP to the acceptable format for HAProxy with Roxy-WI
7. Dynamic change of Maxconn, Black/white lists, add, edit or delete backend's IP address and port with saving changes to the config file

View File

@ -32,6 +32,12 @@ def before_request():
def register_api(view, endpoint, url, pk='listener_id', pk_type='int'):
view_func = view.as_view(endpoint)
bp.add_url_rule(url, view_func=view_func, methods=['POST'])
bp.add_url_rule(f'{url}/<{pk_type}:{pk}>', view_func=view_func, methods=['GET', 'PUT', 'PATCH', 'DELETE'])
def register_api_for_not_api(view, endpoint, url, pk='listener_id', pk_type='int'):
view_func = view.as_view(endpoint, True)
bp.add_url_rule(url, view_func=view_func, methods=['POST'])
bp.add_url_rule(f'{url}/<{pk_type}:{pk}>', view_func=view_func, methods=['GET', 'PUT', 'PATCH', 'DELETE'])
@ -68,7 +74,7 @@ register_api(S3BackupView, 'backup_s3', '/server/backup/s3', 'backup_id')
register_api(GitBackupView, 'backup_git', '/server/backup/git', 'backup_id')
bp.add_url_rule('/server/<server_id>/ip', view_func=ServerIPView.as_view('server_ip_ip'), methods=['GET'])
bp.add_url_rule('/server/<int:server_id>/ip', view_func=ServerIPView.as_view('server_ip'), methods=['GET'])
register_api(CredView, 'cred', '/server/cred', 'cred_id')
register_api_for_not_api(CredView, 'cred', '/server/cred', 'cred_id')
bp.add_url_rule('/server/creds', view_func=CredsView.as_view('creds'), methods=['GET'])
bp.add_url_rule('/server/portscanner/<server_id>', view_func=PortScannerView.as_view('port_scanner_ip'), methods=['GET', 'POST'])
bp.add_url_rule('/server/portscanner/<int:server_id>', view_func=PortScannerView.as_view('port_scanner'), methods=['GET', 'POST'])

View File

@ -436,8 +436,6 @@ def default_values():
{'name': 'roxy-wi-socket', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
{'name': 'roxy-wi-prometheus-exporter', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
{'name': 'roxy-wi-smon', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
{'name': 'prometheus', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Prometheus service'},
{'name': 'grafana-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Grafana service'},
{'name': 'fail2ban', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Fail2ban service'},
{'name': 'rabbitmq-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Rabbitmq service'},
]
@ -613,6 +611,16 @@ def update_db_v_8_0_2():
print("An error occurred:", e)
def update_db_v_8_0_2_1():
try:
RoxyTool.delete().where(RoxyTool.name == 'prometheus').execute()
RoxyTool.delete().where(RoxyTool.name == 'grafana-server').execute()
except Exception as e:
print("An error occurred:", e)
else:
print("Updating... DB has been updated to version 8.0.2-1")
def update_ver():
try:
Version.update(version='8.0.2').execute()
@ -640,4 +648,5 @@ def update_all():
update_db_v_7_4()
update_db_v_8()
update_db_v_8_0_2()
update_db_v_8_0_2_1()
update_ver()

View File

@ -4,11 +4,10 @@ import app.modules.db.sql as sql
from app.modules.service.installation import run_ansible
def generate_exporter_inc(server_ip: str, ext_prom: int, ver: str, exporter: str) -> object:
def generate_exporter_inc(server_ip: str,ver: str, exporter: str) -> object:
inv = {"server": {"hosts": {}}}
server_ips = [server_ip]
inv['server']['hosts'][server_ip] = {
'EXP_PROM': ext_prom,
f'{exporter}_exporter_version': ver,
'service': f'{exporter} exporter'
}
@ -28,10 +27,10 @@ def generate_exporter_inc(server_ip: str, ext_prom: int, ver: str, exporter: str
return inv, server_ips
def install_exporter(server_ip: str, ver: str, ext_prom: int, exporter: str) -> object:
def install_exporter(server_ip: str, ver: str, exporter: str) -> object:
service = f'{exporter.title()} exporter'
try:
inv, server_ips = generate_exporter_inc(server_ip, ext_prom, ver, exporter)
inv, server_ips = generate_exporter_inc(server_ip, ver, exporter)
return run_ansible(inv, server_ips, f'{exporter}_exporter'), 201
except Exception as e:
raise Exception(f'error: Cannot install {service}: {e}')

View File

@ -59,15 +59,6 @@ def generate_geoip_inv(server_ip: str, installed_service: str, geoip_update: int
return inv, server_ips
def generate_grafana_inv() -> object:
inv = {"server": {"hosts": {}}}
server_ips = []
inv['server']['hosts']['localhost'] = {}
server_ips.append('localhost')
return inv, server_ips
def generate_kp_inv(json_data: json, installed_service) -> object:
inv = {"server": {"hosts": {}}}
server_ips = []

View File

@ -1,5 +1,5 @@
import pytz
from flask import render_template, request, g
from flask import render_template, g
from flask_jwt_extended import jwt_required
from app import scheduler
@ -13,7 +13,6 @@ from app.middleware import get_user_params
import app.modules.roxywi.roxy as roxy
import app.modules.roxywi.auth as roxywi_auth
import app.modules.roxywi.common as roxywi_common
import app.modules.tools.smon as smon_mod
import app.modules.tools.common as tools_common
import app.modules.server.ssh as ssh_mod
from app.views.admin.views import SettingsView

View File

@ -50,13 +50,12 @@ def install_exporter(exporter):
json_data = request.get_json()
server_ip = common.is_ip_or_dns(json_data['server_ip'])
ver = common.checkAjaxInput(json_data['exporter_v'])
ext_prom = common.checkAjaxInput(json_data['ext_prom'])
if exporter not in ('haproxy', 'nginx', 'apache', 'keepalived', 'node'):
return jsonify({'status': 'failed', 'error': 'Wrong exporter'})
try:
return exp_installation.install_exporter(server_ip, ver, ext_prom, exporter)
return exp_installation.install_exporter(server_ip, ver, exporter)
except Exception as e:
return jsonify({'status': 'failed', 'error': f'Cannot install {exporter.title()} exporter: {e}'})
@ -67,15 +66,6 @@ def get_exporter_version(exporter, server_ip):
return service_common.get_exp_version(server_ip, exporter)
@bp.route('/grafana')
def install_grafana():
try:
inv, server_ips = service_mod.generate_grafana_inv()
return service_mod.run_ansible(inv, server_ips, 'grafana'), 201
except Exception as e:
return f'{e}'
@bp.post('/waf/<service>/<server_ip>')
def install_waf(service, server_ip):
server_ip = common.is_ip_or_dns(server_ip)

View File

@ -1,97 +0,0 @@
- hosts: localhost
become: yes
become_method: sudo
roles:
- role: cloudalchemy.prometheus
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"
vars:
prometheus_targets:
node:
- targets:
- "{{ansible_hostname}}:9100"
- role: cloudalchemy.grafana
environment:
http_proxy: "{{PROXY}}"
https_proxy: "{{PROXY}}"
vars:
grafana_security:
admin_user: admin
admin_password: admin
grafana_datasources:
- name: prometheus
type: prometheus
url: "http://{{ansible_default_ipv4.address}}:9090"
basicAuth: false
grafana_dashboards:
- dashboard_id: 2428
revision_id: 7
datasource: prometheus
- dashboard_id: 11879
revision_id: 3
datasource: prometheus
- dashboard_id: 11074
revision_id: 9
datasource: prometheus
tasks:
- name: populate service facts
service_facts:
- name: Open stat port for firewalld
firewalld:
port: "{{ item }}/tcp"
state: enabled
permanent: yes
immediate: yes
ignore_errors: yes
no_log: True
debugger: never
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts.services["firewalld.service"]['state'] == "running"
with_items: [ "3000", "9090" ]
- name: Open stat port for iptables
iptables:
chain: INPUT
destination_port: "{{ item }}"
jump: ACCEPT
protocol: tcp
ignore_errors: yes
with_items: [ "3000", "9090" ]
- name: Ensure group "grafana" exists
ansible.builtin.group:
name: grafana
state: present
- name: Add the Grafana user
user:
name: grafana
shell: /sbin/nologin
groups: grafana
append: yes
- name: Create a directory if it does not exist
file:
path: "{{ item }}"
state: directory
mode: '0755'
owner: grafana
with_items:
- /var/lib/grafana
- /var/log/grafana
- /etc/grafana
- name: Create grafana.ini
file:
path: /etc/grafana/grafana.ini
owner: grafana
group: grafana
mode: '0644'
state: touch
- name: Restart service Grafana, in all cases
service:
name: grafana-server
state: restarted

View File

@ -7,8 +7,6 @@
'roxy-wi-smon': { 'name': 'SMON', 'desc': lang.admin_page.desc.smon_desc },
'roxy-wi-socket': { 'name': 'Socket', 'desc': lang.admin_page.desc.socket_desc },
'roxy-wi-prometheus-exporter': { 'name': 'Prometheus exporter', 'desc': 'Prometheus exporter exports Roxy-WI metrics' },
'prometheus': { 'name': 'Prometheus', 'desc': 'Prometheus server' },
'grafana-server': { 'name': 'Grafana', 'desc': 'Grafana server' },
'fail2ban': { 'name': 'Fail2ban', 'desc': 'Fail2ban scans log files (e.g. /var/log/apache/error_log) and bans IPs that show the malicious signs' },
'rabbitmq-server': { 'name': 'RabbitMQ', 'desc': 'RabbitMQ server' },
}
@ -41,9 +39,7 @@
</td>
<td class="padding10 first-collumn">
{% if 'is not installed' in service.2['current_version'] or not service.2['current_version'] or service.2['current_version'] == '0' %}
{% if service.0 in ('prometheus', 'grafana-server') %}
<a href="/install#monitoring" class="ui-button ui-widget ui-corner-all" title="{{lang.words.install|title()}} {{service_name}}">{{lang.words.install|title()}}</a>
{% elif service.0 in ('rabbitmq-server', 'fail2ban') %}
{% if service.0 in ('rabbitmq-server', 'fail2ban') %}
<a class="ui-button ui-widget ui-corner-all" href="https://roxy-wi.org/tools/{{service.0.split('-')[0]}}" title="{{lang.words.install|title()}} {{services_name[service.0]['name']}}" target="_blank">{{lang.words.install|title()}}</a>
{% else %}
<a class="ui-button ui-widget ui-corner-all" onclick="updateService('{{service.0}}', 'install')" title="{{lang.words.install|title()}} {{service_name}}">{{lang.words.install|title()}}</a>

View File

@ -145,46 +145,12 @@
</h4>
</div>
{% else %}
{% if g.user_params['role']|int() == 1 %}
<table id="grafana-table">
<caption><i class="fas fa-chart-bar caption-icon2"></i><h3>Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 40%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.note|title()}}</td>
<td></td>
<td></td>
</tr>
<tr>
<td id="cur_grafana_ver" class="padding10 first-collumn">
{% if grafana == "active" %}
Grafana {{lang.words.and}} Prometheus {{lang.admin_page.desc.been_installed}}
{% else %}
{{lang.admin_page.desc.there_are_no}}
{% endif %}
</td>
<td class="padding10 first-collumn" style="width: 20%;">
{{lang.admin_page.desc.latest_repo}} Grafana {{lang.words.and}} Prometheus
</td>
<td class="padding10 first-collumn">
{{lang.admin_page.desc.before_install}} Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}
</td>
<td></td>
<td>
{% if grafana != "active" %}
<span class="ui-button ui-widget ui-corner-all" id="grafana_install" title="{{lang.words.install|title()}} Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}">{{lang.words.install|title()}}</span>
{% endif %}
</td>
</tr>
</table>
{% endif %}
<table id="haproxy-table">
<caption><i class="fas fa-network-wired caption-icon2"></i><h3>HAProxy Exporter</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
<td class="help_cursor" style="width: 20%;" data-intro="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
<td></td>
<td></td>
</tr>
@ -203,7 +169,6 @@
{% endfor %}
</select>
</td>
<td style="padding-left: 50px;">{{ checkbox('haproxy_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="haproxy_exp_install" title="{{lang.words.install|title()}} HAProxy Exporter">{{lang.words.install|title()}}</span>
</td>
@ -215,7 +180,6 @@
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
<td class="help_cursor" style="width: 20%;" data-help="lang.admin_page.desc.ext_prom">{{lang.words.external|title()}} Prometheus</td>
<td></td>
<td></td>
</tr>
@ -234,7 +198,6 @@
{% endfor %}
</select>
</td>
<td style="padding-left: 50px;">{{ checkbox('nginx_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="nginx_exp_install" title="{{lang.words.install|title()}} NGINX Exporter">{{lang.words.install|title()}}</span>
</td>
@ -246,7 +209,6 @@
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
<td class="help_cursor" style="width: 20%;" data-help="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
<td></td>
<td></td>
</tr>
@ -265,7 +227,6 @@
{% endfor %}
</select>
</td>
<td style="padding-left: 50px;">{{ checkbox('apache_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="apache_exp_install" title="{{lang.words.install|title()}} Apache Exporter">{{lang.words.install|title()}}</span>
</td>
@ -277,7 +238,6 @@
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
<td class="help_cursor" style="width: 20%;" title="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
<td></td>
<td></td>
</tr>
@ -296,7 +256,6 @@
{% endfor %}
</select>
</td>
<td style="padding-left: 50px;">{{ checkbox('keepalived_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="keepalived_exp_install" title="{{lang.words.install|title()}} Keepalived Exporter">{{lang.words.install|title()}}</span>
</td>
@ -308,7 +267,6 @@
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
<td class="help_cursor" style="width: 20%;" title="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
<td></td>
<td></td>
</tr>
@ -327,7 +285,6 @@
{% endfor %}
</select>
</td>
<td style="padding-left: 50px;">{{ checkbox('node_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
<td>
<span class="ui-button ui-widget ui-corner-all" id="node_exp_install" title="{{lang.words.install|title()}} Node Exporter">{{lang.words.install|title()}}</span>
</td>

View File

@ -430,7 +430,6 @@
"desc": {
"latest_repo": "Roxy-WI will try to install the latest version of the service from the official repository",
"install_as_docker": "Install service as a Docker container",
"ext_prom": "This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter.",
"no_ansible": "You have not installed",
"before_install": "Before installing any exporters, first install",
"been_installed": "servers have been installed",

View File

@ -430,7 +430,6 @@
"desc": {
"latest_repo": "Roxy-WI va essayer d\'installer la dernière version du service à partir du dépôt officiel.",
"install_as_docker": "Installer le service comme un conteneur Docker",
"ext_prom": "Cet Exporter sera utilisé par un Prometheus externe. Utilisez également cette case à cocher si vous mettez à jour l\'Exporter",
"no_ansible": "Vous ne l\'avez pas installé",
"before_install": "Avant d\'installer l\'Exporter, installez le d\'abord",
"been_installed": "les serveurs ont été installés",

View File

@ -430,7 +430,6 @@
"desc": {
"latest_repo": "O Roxy-WI tentará instalar a versão mais recente do serviço do repositório oficial",
"install_as_docker": "Instalar serviço como um container do Docker",
"ext_prom": "Este exportador será usado para um Prometheus externo. Usa este checkbox para atualizar o Exporter.",
"no_ansible": "Você não instalou",
"before_install": "Antes de instalar exportadores, primeiro instale",
"been_installed": "servidores instalados",

View File

@ -430,7 +430,6 @@
"desc": {
"latest_repo": "Roxy-WI попытается установить последнюю версию сервиса из официального репозитория",
"install_as_docker": "Установить сервис как контейнер Docker",
"ext_prom": "Этот экспортер будет использоваться внешним Prometheus. Также используйте этот флажок, если вы обновляете экспортер.",
"no_ansible": "You have not installed",
"before_install": "Прежде чем устанавливать какие-либо экспортеры, сначала установите",
"been_installed": "сервера были установлены",