From ebf1ab59859431d12b369cd2cbbcf385c92986aa Mon Sep 17 00:00:00 2001 From: Yuri Lima Date: Thu, 30 Jan 2025 13:01:50 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20NEW:=20DEV-871=20Add=20Hetzner?= =?UTF-8?q?=20Plugin=20to=20Grafana=20monitor=20all=20Server=20Dynamic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- Dockerfile.prometheus | 6 + config/hetzner_targets.json | 227 ++++++++++++++++++ config/prometheus.yaml | 109 +-------- docker-compose.yml | 17 +- hetzner_discovery.py | 86 +++++++ .../grafana.phx-erp.de/production/signed.crt | 30 +-- .../production/signed.crt | 30 +-- https_portal/log/error.log | 11 +- 9 files changed, 378 insertions(+), 141 deletions(-) create mode 100644 Dockerfile.prometheus create mode 100644 config/hetzner_targets.json create mode 100644 hetzner_discovery.py diff --git a/.gitignore b/.gitignore index 4454e3e..e86b301 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ redis e2e https_portal/log https_portal/data -assets \ No newline at end of file +assets +.env \ No newline at end of file diff --git a/Dockerfile.prometheus b/Dockerfile.prometheus new file mode 100644 index 0000000..9b9f0fb --- /dev/null +++ b/Dockerfile.prometheus @@ -0,0 +1,6 @@ +FROM docker.io/prom/prometheus:v2.51.2 + +# Set the proper permissions for certificates +RUN if [ -f ./https_portal/data/prometheus.phx-erp.de/production/signed.crt ]; then chmod 644 ./https_portal/data/prometheus.phx-erp.de/production/signed.crt; fi && \ + if [ -f ./https_portal/data/prometheus.phx-erp.de/production/domain.key ]; then chmod 600 ./https_portal/data/prometheus.phx-erp.de/production/domain.key; fi +CMD ["prometheus", "--config.file=/etc/prometheus/prometheus.yaml", "--web.config.file=/etc/prometheus/web-config.yaml", "--web.external-url=https://prometheus.phx-erp.de"] \ No newline at end of file diff --git a/config/hetzner_targets.json b/config/hetzner_targets.json new file mode 100644 index 0000000..421c71b --- /dev/null +++ b/config/hetzner_targets.json @@ -0,0 +1,227 @@ +[ + { + "targets": [ + "157.90.161.42:9100" + ], + "labels": { + "instance": "PHX-DEV-001.Alpha", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "167.235.254.4:9100" + ], + "labels": { + "instance": "ANSIBLE-MASTER", + "datacenter": "fsn1" + } + }, + { + "targets": [ + "116.203.75.215:9100" + ], + "labels": { + "instance": "cts", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "162.55.52.253:9100" + ], + "labels": { + "instance": "Phx-Yuri", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "162.55.54.75:9100" + ], + "labels": { + "instance": "benzinger-demo", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "5.75.183.139:9100" + ], + "labels": { + "instance": "phx-internal", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "142.132.165.231:9100" + ], + "labels": { + "instance": "trachtenmode-schmid", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "23.88.107.109:9100" + ], + "labels": { + "instance": "teamcity", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "49.13.146.138:9100" + ], + "labels": { + "instance": "gitea", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "159.69.200.205:9100" + ], + "labels": { + "instance": "phx-beta-rc", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.53.137:9100" + ], + "labels": { + "instance": "lhl", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "5.75.153.161:9100" + ], + "labels": { + "instance": "Grafana-Prometheus", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "159.69.44.39:9100" + ], + "labels": { + "instance": "cooper", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "49.13.165.13:9100" + ], + "labels": { + "instance": "shipxpert", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "49.13.197.152:9100" + ], + "labels": { + "instance": "dss", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "188.245.44.219:9100" + ], + "labels": { + "instance": "sartissohn", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.92.218:9100" + ], + "labels": { + "instance": "guntli", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "94.130.77.57:9100" + ], + "labels": { + "instance": "kolb", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "128.140.15.177:9100" + ], + "labels": { + "instance": "docuvita", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.151.20:9100" + ], + "labels": { + "instance": "ried", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.68.120:9100" + ], + "labels": { + "instance": "heba", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.128.69:9100" + ], + "labels": { + "instance": "eicsoft", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "159.69.93.252:9100" + ], + "labels": { + "instance": "ck-vechta", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "116.203.46.171:9100" + ], + "labels": { + "instance": "eeparts", + "datacenter": "nbg1" + } + }, + { + "targets": [ + "167.235.130.242:9100" + ], + "labels": { + "instance": "big-break-changes", + "datacenter": "nbg1" + } + } +] \ No newline at end of file diff --git a/config/prometheus.yaml b/config/prometheus.yaml index 08688fb..c4302c0 100644 --- a/config/prometheus.yaml +++ b/config/prometheus.yaml @@ -1,105 +1,10 @@ global: - scrape_interval: 15s # By default, scrape targets every 15 seconds. + scrape_interval: 15s # Default for all jobs unless overridden - # Attach these labels to any time series or alerts when communicating with - # external systems (federation, remote storage, Alertmanager). - # external_labels: - # monitor: 'codelab-monitor' - -# A scrape configuration containing exactly one endpoint to scrape: -# Here it's Prometheus itself. scrape_configs: - - job_name: "Prometheus Server" - scrape_interval: 5s - static_configs: - - targets: ["5.75.153.161:9090", "prometheus.phx-erp.de"] - - - job_name: 'node' - scrape_interval: 5s - static_configs: - - targets: ['5.75.153.161:9100'] - - - job_name: "Phx Yuri" - scrape_interval: 5s - static_configs: - - targets: ["162.55.52.253:9100", "node-yuri.phx-erp.de"] - - - job_name: "lhl" - scrape_interval: 5s - static_configs: - - targets: ["116.203.53.137:9100", "node-lhl.phx-erp.de"] - - - job_name: "Phx Beta RC" - scrape_interval: 5s - static_configs: - - targets: ["116.203.53.137:9100", "node-beta-rc.phx-erp.de"] - - - job_name: "Gitea" - scrape_interval: 5s - static_configs: - - targets: ["49.13.146.138:9100", "node-gitea.phx-erp.de"] - - - job_name: "Team City" - scrape_interval: 5s - static_configs: - - targets: ["23.88.107.109:9100", "node-teamcity.phx-erp.de"] - - - job_name: "Cooper" - scrape_interval: 5s - static_configs: - - targets: ["159.69.44.39:9100", "node-cooper.phx-erp.de"] - - - job_name: "Shipxpert" - scrape_interval: 5s - static_configs: - - targets: ["49.13.165.13:9100", "node-shipxpert.phx-erp.de"] - - - job_name: "Dss" - scrape_interval: 5s - static_configs: - - targets: ["49.13.197.152:9100", "node-dss.phx-erp.de"] - - - job_name: "Guntli" - scrape_interval: 5s - static_configs: - - targets: ["116.203.92.218:9100", "node-guntli.phx-erp.de"] - - - job_name: "Sartissohn" - scrape_interval: 5s - static_configs: - - targets: ["188.245.44.219:9100", "node-sartissohn.phx-erp.de"] - - - job_name: "Kolb" - scrape_interval: 5s - static_configs: - - targets: ["94.130.77.57:9100", "node-kolb.phx-erp.de"] - - - job_name: "Trachtenmode Schmid" - scrape_interval: 5s - static_configs: - - targets: ["142.132.165.231:9100", "node-trachtenmode-schmid.phx-erp.de"] - - - job_name: "Phx Internal" - scrape_interval: 5s - static_configs: - - targets: ["5.75.183.139:9100", "node-internal.phx-erp.de"] - - - job_name: "Benzinger Demo" - scrape_interval: 5s - static_configs: - - targets: ["162.55.54.75:9100", "node-benzinger-demo.phx-erp.de"] - - - job_name: "CTS" - scrape_interval: 5s - static_configs: - - targets: ["116.203.75.215:9100", "node-cts.phx-erp.de"] - - - job_name: "Ansible Master" - scrape_interval: 5s - static_configs: - - targets: ["167.235.254.4:9100", "node-ansible-master.phx-erp.de"] - - - job_name: "Alpha" - scrape_interval: 5s - static_configs: - - targets: ["157.90.161.42:9100", "node-alpha.phx-erp.de"] \ No newline at end of file + - job_name: "hetzner-dynamic" + file_sd_configs: + - files: + - "/hetzner_targets.json" + refresh_interval: 30s + scrape_interval: 5s # Custom interval for Hetzner servers \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7c22e68..c58889d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,8 +6,8 @@ volumes: driver: local networks: default: - external: - name: grafana-prometheus + name: grafana-prometheus + external: true services: grafana: image: docker.io/grafana/grafana-oss:10.4.2 @@ -39,19 +39,22 @@ services: prometheus: image: docker.io/prom/prometheus:v2.51.2 container_name: prometheus + user: "65534:65534" ports: - 9090:9090 - command: " - --config.file=/etc/prometheus/prometheus.yaml \ - --web.config.file=/etc/prometheus/web-config.yaml \ - --web.external-url=https://prometheus.phx-erp.de - " + command: + - "--config.file=/etc/prometheus/prometheus.yaml" + - "--web.config.file=/etc/prometheus/web-config.yaml" + - "--web.external-url=https://prometheus.phx-erp.de" volumes: # - '--web.enable-lifecycle' # Enable reload of configuration automatically without restart !!! - ./config/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro # RO Read-only - ./config/web-config.yaml:/etc/prometheus/web-config.yaml:ro # RO Read-only - ./https_portal/data/prometheus.phx-erp.de/production:/etc/prometheus/certs + - ./config:/opt/phx/main/config # 🔹 Add this to mount the config folder - prometheus-data:/prometheus + - ./https_portal/data/prometheus.phx-erp.de/production/signed.crt:/etc/prometheus/certs/signed.crt:ro + - ./https_portal/data/prometheus.phx-erp.de/production/domain.key:/etc/prometheus/certs/domain.key:ro restart: unless-stopped networks: - default diff --git a/hetzner_discovery.py b/hetzner_discovery.py new file mode 100644 index 0000000..a9501b0 --- /dev/null +++ b/hetzner_discovery.py @@ -0,0 +1,86 @@ +import requests +import json +import os +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +# 🔑 Load Hetzner API Token +HETZNER_API_TOKEN = os.getenv("HETZNER_API_TOKEN") + +# Check if token is loaded +if not HETZNER_API_TOKEN: + raise ValueError("❌ HETZNER_API_TOKEN is missing! Make sure it's set in the .env file.") + +# 📂 Path to the Prometheus service discovery file +PROMETHEUS_TARGETS_FILE = "/opt/phx/main/config/hetzner_targets.json" +ERROR_LOG_FILE = "/opt/phx/main/config/hetzner_error_servers.json" + +# 📌 Hetzner API URL +HETZNER_API_URL = os.getenv("HETZNER_API_URL") + +# Check if API URL is loaded +if not HETZNER_API_URL: + raise ValueError("❌ HETZNER_API_URL is missing! Make sure it's set in the .env file.") + + +# 📡 Fetch Hetzner server list +def get_hetzner_servers(): + headers = {"Authorization": f"Bearer {HETZNER_API_TOKEN}"} + response = requests.get(HETZNER_API_URL, headers=headers) + + if response.status_code != 200: + print(f"❌ Error fetching servers: {response.text}") + return [] + + return response.json().get("servers", []) + + +# 🏗️ Generate Prometheus JSON file +def generate_prometheus_sd_config(): + servers = get_hetzner_servers() + targets = [] + error_servers = [] + + for server in servers: + if "public_net" in server and "ipv4" in server["public_net"]: + ipv4 = server["public_net"]["ipv4"]["ip"] + server_name = server["name"] + datacenter = server["datacenter"]["location"]["name"] + + targets.append({ + "targets": [f"{ipv4}:9100"], + "labels": { + "instance": server_name, + "datacenter": datacenter + } + }) + else: + # Log the server that couldn't be added + error_servers.append({ + "server_id": server["id"], + "name": server["name"], + "status": server["status"], + "datacenter": server["datacenter"]["location"]["name"], + "reason": "Missing public_net or IPv4" + }) + + # Save JSON to Prometheus target file + with open(PROMETHEUS_TARGETS_FILE, "w") as f: + json.dump(targets, f, indent=4) + + print(f"✅ Updated Prometheus targets in {PROMETHEUS_TARGETS_FILE}") + + # Save error logs if any servers were skipped + if error_servers: + with open(ERROR_LOG_FILE, "w") as f: + json.dump(error_servers, f, indent=4) + print(f"⚠️ Some servers could not be added. Check {ERROR_LOG_FILE} for details.") + else: + print("✅ All servers were added successfully, no errors detected.") + + +# 🔄 Run the script +if __name__ == "__main__": + generate_prometheus_sd_config() \ No newline at end of file diff --git a/https_portal/data/grafana.phx-erp.de/production/signed.crt b/https_portal/data/grafana.phx-erp.de/production/signed.crt index e5e6486..c313542 100644 --- a/https_portal/data/grafana.phx-erp.de/production/signed.crt +++ b/https_portal/data/grafana.phx-erp.de/production/signed.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- -MIIE9DCCA9ygAwIBAgISBDTvkeGcJN7cgStYhZRIi215MA0GCSqGSIb3DQEBCwUA +MIIE9TCCA92gAwIBAgISAwzhqoLZ0fS63QkInFmDAX4pMA0GCSqGSIb3DQEBCwUA MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD -EwNSMTEwHhcNMjQwNzAyMDUxMjAzWhcNMjQwOTMwMDUxMjAyWjAdMRswGQYDVQQD +EwNSMTEwHhcNMjQxMjI4MjMyNDAxWhcNMjUwMzI4MjMyNDAwWjAdMRswGQYDVQQD ExJncmFmYW5hLnBoeC1lcnAuZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDBdjepETkdm9xE+6NG4FvXAhEE16t0aBGkIBgs/DUUyMcx8f8b4TMDqEtl AMXtkRAC4pM/eeAMNq3yfeuLX9vG+E6Jra9vrcF6ThikARlnrEmNHD5qq7FfGiWM vAsRrxeOW22TFQu7AlUK3mxQodDQkvKRhwHflo/f6dL6Z7jPTgVteZb5U0cEWxba 4kW/voO5aI/vm4kABoUdyzSy1cwza5fO0OQRLnAnV9wdtbx/47BLuacHSK4L8n30 KLhqrnnftT9XQiT18L9L4N8laBPuIGD+9Xix74izRs6kJCc/fm21hFTA+NuT5URM -UizyBp17yeX/vXH7d1v9TYL59UjdAgMBAAGjggIWMIICEjAOBgNVHQ8BAf8EBAMC +UizyBp17yeX/vXH7d1v9TYL59UjdAgMBAAGjggIXMIICEzAOBgNVHQ8BAf8EBAMC BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAw HQYDVR0OBBYEFLuJi7SLpiYjNoDoBnLeTIb1Hh50MB8GA1UdIwQYMBaAFMXPRqTq 9MPAemyVxC2wXpIvJuO5MFcGCCsGAQUFBwEBBEswSTAiBggrBgEFBQcwAYYWaHR0 cDovL3IxMS5vLmxlbmNyLm9yZzAjBggrBgEFBQcwAoYXaHR0cDovL3IxMS5pLmxl bmNyLm9yZy8wHQYDVR0RBBYwFIISZ3JhZmFuYS5waHgtZXJwLmRlMBMGA1UdIAQM -MAowCAYGZ4EMAQIBMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYASLDja9qmRzQP -5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGQchJbcAAABAMARzBFAiEAu0E/v48I -rq3HBHWKTh6o80DulrsGxHWCosqePtHOx+YCIFUg7+MOTzGSq/DiAz6ISLgtalhw -1bhvPtHN+/qB5zL9AHYAPxdLT9ciR1iUHWUchL4NEu2QN38fhWrrwb8ohez4ZG4A -AAGQchJbZQAABAMARzBFAiASWbFzTz35eEulTzgKvehuAhbbAuIhXNuSKUDMtFom -DAIhAKMQtJgBjln1nKe8Vc5r8vWor0c5IfBXhHxzoCvok8anMA0GCSqGSIb3DQEB -CwUAA4IBAQAmtvQyWxnq8gh17CRYC9UenmC0mpoLo5UiGcmV5SR4mIVjnQRdp1fr -mJFpcGVTpVDAd22aUIS1QcOejEICC5r0ykrB7Gj66D0nYXrm4CfX71XhHViba7kv -ouB6j2C0cNIYd3NmrAZWWPH8osbR1AFpJWwWSX8KojKTZ3K8OY7/SkM+uZ2enVHE -HRD0s2R0rHUvTYkmYX6yMAKD9uceN7MzdkzLdbIh+zKiUBVYK37L23jSGw75PI8U -zN8/bE91XKb4/hH/YsCMO/1u68D2p6vmgmxZRj8H8hEBBhFpQaC2hCYRoWsbuNVu -1POM3rYNrHkNLzoZBvOFL8WgJ6MtfRVy +MAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAcyAiDwgWivnz +xKaLCrJqmkoA7vV3hYoITQUA1KVCRFkAAAGUD8sF2gAABAMASDBGAiEAwvxEK9nh +4wnf0vaUn4rWl35EznLoiOD+oWIaxyzsUv0CIQCFT1MF/AWr1/zJiBWZoV6Pce57 +T4d2MEGaGy35QU1FiwB2AKLjCuRF772tm3447Udnd1PXgluElNcrXhssxLlQpEfn +AAABlA/LBdoAAAQDAEcwRQIgAy0GLb9048EDmhT4EzCEIWd+f5ze1SBY0IrUi/Nq +ipkCIQDxX1DEkbBnxnO6U2YgSeKRU/BiUA24fWkdN5brf5KnKzANBgkqhkiG9w0B +AQsFAAOCAQEAnH1I6R966b5Bl/Sbm1uQy2ayflXFdq+p9th9+WIy5Z1PMmW/oeVa +TNpjO+M8UjGznf6tzd2Ur9YgAWYR1EeawmkDJqp5lQfNHWhEVLU4CTgWVfBrIagM +mVs54WKmUAxkPYftEzBXV3rAvz8WLy4dDnEUGrr7ZwJNB8JTWOzB+akPKUkiOrPx +p9vmvYc6Yxv9YtaMjcVvU61RBxQo6XobT1Zg6O1gPU9JmNBw9vgfVITCBv01oGCa +uFBqjdkn2DZdOpZk2orrKKll6CFSVCrLcI55Ja1kRJLoMtbMfOmAEewWfGbcxnZv +hI9isR7X8MJ9rsJhaqOQOQ84mnNteR4+ww== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- diff --git a/https_portal/data/prometheus.phx-erp.de/production/signed.crt b/https_portal/data/prometheus.phx-erp.de/production/signed.crt index 0b1f3d3..d06ebdd 100644 --- a/https_portal/data/prometheus.phx-erp.de/production/signed.crt +++ b/https_portal/data/prometheus.phx-erp.de/production/signed.crt @@ -1,31 +1,31 @@ -----BEGIN CERTIFICATE----- -MIIE+DCCA+CgAwIBAgISBH95HJK8b1S9cOWH1ErrGG7vMA0GCSqGSIb3DQEBCwUA +MIIE+TCCA+GgAwIBAgISBOmwA+dtHvdNzMHA9pDKORoqMA0GCSqGSIb3DQEBCwUA MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD -EwNSMTAwHhcNMjQwNzAyMDUxMjE1WhcNMjQwOTMwMDUxMjE0WjAgMR4wHAYDVQQD +EwNSMTAwHhcNMjQxMjI4MjMyNDEyWhcNMjUwMzI4MjMyNDExWjAgMR4wHAYDVQQD ExVwcm9tZXRoZXVzLnBoeC1lcnAuZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCx+/3s+NJEchgLo3GfBIzSBN/q52J46liUx6qISjbswhr7Fxg166rC K7ybmqs6y+1bsHzYjCQ0bBCp4Gjhrs/kfVSZ/CpjpfNV3XpanJt9AD00qFCbLX9u X69PRre/URdOfwtxW0ZZxev4/H9us1epSk54vq25ntR9Nl1IFMZ+b7Bk6CRa7Q7i DkpM/6Cv2A+QhbUozOcQjv1vnpnSxST/QbW03dvvy6OR9OlG5bzrAADW0Mo2BREO 8GfOY8YIX2EZvEYHDda4KztLvMhAN79iKmlzlP+rsKEddvN64ivvKhW9MUgf7NIF -w9dHIJs16lomoxp87kQ9Eav+K8Gw0PNHAgMBAAGjggIXMIICEzAOBgNVHQ8BAf8E +w9dHIJs16lomoxp87kQ9Eav+K8Gw0PNHAgMBAAGjggIYMIICFDAOBgNVHQ8BAf8E BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC MAAwHQYDVR0OBBYEFCDXhBghaDDRLeSvoxXD7qp/++hrMB8GA1UdIwQYMBaAFLu8 w0el5LypxsOkcgwQjaI14cjoMFcGCCsGAQUFBwEBBEswSTAiBggrBgEFBQcwAYYW aHR0cDovL3IxMC5vLmxlbmNyLm9yZzAjBggrBgEFBQcwAoYXaHR0cDovL3IxMC5p LmxlbmNyLm9yZy8wIAYDVR0RBBkwF4IVcHJvbWV0aGV1cy5waHgtZXJwLmRlMBMG -A1UdIAQMMAowCAYGZ4EMAQIBMIIBAgYKKwYBBAHWeQIEAgSB8wSB8ADuAHUASLDj -a9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGQchKHvAAABAMARjBEAiAL -mEILf1FPzNkLwSWQ5rxxu7kqojeclLB19m5x3PHgTgIgaCIfNOPqHgiiD7d1yTHo -cL46GqtXSg5rEOS8vswpZLYAdQDuzdBk1dsazsVct520zROiModGfLzs3sNRSFlG -cR+1mwAAAZByEofDAAAEAwBGMEQCIBjBmMC0yaiWf0P8NjLRTepuEcN9ydKyu6nW -pjNIragwAiBP8WFdGHVotFkaoK1qD5oQj75pOATfOOOlZ5ZRyanS9DANBgkqhkiG -9w0BAQsFAAOCAQEAdHTTmispo3jCdWGByTaTD7w+W9HMdg6v61c5ZTNgn4Kb2cxS -PqZWE6b/KSxxx/VZb+4VS7aF89kHpNv2jFZmIlub7huqox9ey7SPSnYY4jMtAVdu -xtWslYuUH4Nv0Knzszja/yKxFk3XMZ0Ah/MdqT+JAClLt0K6qiWZf0tyOCXyUZxh -BHYVrc9V+xZkcQ1dd+UMAFrvfZSyRXy8wYJzz9Kuvk1S4wsQtWp+1YkIoFfiSIJN -GisX3WMjdx5EsAJjjjqT8ZlJ3TdwdHmKPkudSc4VmrYjt6pNRda+rztKxldX2bsU -J/qMB51HMuz9I+wfrj8ZNtXbSuSqdMaFGIcUDg== +A1UdIAQMMAowCAYGZ4EMAQIBMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAouMK +5EXvva2bfjjtR2d3U9eCW4SU1yteGyzEuVCkR+cAAAGUD8syPAAABAMARjBEAiAA +9m1jW0X1axy3svqRR14c/f+rG3Aqs0hxtFICa0B1JwIgb9EXAXMbLdU8asLkiMUO +FWCPNhsz4BSMmG4hj8a2hmgAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2XjbapflTA +/kwNsAAAAZQPyzJLAAAEAwBHMEUCIQDnaNyvW38vlep1BaPrPp7pB3JHqZFSQvgN +5PpA3F9ZiQIgS06COcu12H6HbgA79457y+3qdyxlhxXdDYLISYwL+swwDQYJKoZI +hvcNAQELBQADggEBAHcxvLgLS8/wTj77T8jC1FLCd/7bUpuBkm7N/XJgi/er7wXv +Y1IE4A1V2hbkcrJT9lH0YbbUYf/UqpNAy1WLD7xAFvuie4jVGtpAgibnaPqNu8x0 +V3jPiaUf75Ejb7+5bM39GOaIGheFpciHQ9bLVEG0HpUwV/8W+KYKo37Az8ABuwnJ +Bodmbs73Xcpz2D3p+mSoMu35L3T/ifSsXz/ebzaRiXQRCWLJtOxfBpJbFJFMfyug +mVnSdGsEsLN2WXmSFNxK2o1H61bAgQ5WtadpbGvXOSVrOCOObl4E5QaPQsckqsTj +d/htP0HtBQoWc1kOtZ5Ng+wig5hoojVxTkGH7IA= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- diff --git a/https_portal/log/error.log b/https_portal/log/error.log index ad78f56..048c8da 100644 --- a/https_portal/log/error.log +++ b/https_portal/log/error.log @@ -1 +1,10 @@ -2024/07/23 03:45:01 [notice] 499#499: signal process started +2025/01/30 03:45:01 [notice] 1650#1650: signal process started +2025/01/30 11:01:20 [notice] 265#265: signal process started +2025/01/30 11:35:11 [notice] 264#264: signal process started +2025/01/30 12:33:22 [notice] 265#265: signal process started +2025/01/30 12:34:04 [notice] 265#265: signal process started +2025/01/30 12:37:19 [notice] 264#264: signal process started +2025/01/30 12:37:41 [notice] 265#265: signal process started +2025/01/30 12:49:57 [notice] 265#265: signal process started +2025/01/30 12:53:15 [notice] 266#266: signal process started +2025/01/30 12:56:58 [notice] 265#265: signal process started