📦 NEW: DEV-871 Add Hetzner Plugin to Grafana monitor all Server Dynamic

This commit is contained in:
2025-01-30 13:01:50 +00:00
parent a4d9888bfe
commit ebf1ab5985
9 changed files with 378 additions and 141 deletions

3
.gitignore vendored
View File

@@ -7,4 +7,5 @@ redis
e2e
https_portal/log
https_portal/data
assets
assets
.env

6
Dockerfile.prometheus Normal file
View File

@@ -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"]

227
config/hetzner_targets.json Normal file
View File

@@ -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"
}
}
]

View File

@@ -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"]
- job_name: "hetzner-dynamic"
file_sd_configs:
- files:
- "/hetzner_targets.json"
refresh_interval: 30s
scrape_interval: 5s # Custom interval for Hetzner servers

View File

@@ -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

86
hetzner_discovery.py Normal file
View File

@@ -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()

View File

@@ -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-----

View File

@@ -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-----

View File

@@ -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