Prometheus 1C Exporter
ΠΠ½ΠΎΠ³ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠΏΠΎΡΡΠ΅Ρ ΠΌΠ΅ΡΡΠΈΠΊ 1Π‘ Π΄Π»Ρ Prometheus Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ
.
π ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
-
Π‘Π±ΠΎΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΠΌΠ΅ΡΡΠΈΠΊ 1Π‘ ΡΠ΅ΡΠ΅Π· ΡΡΠΈΠ»ΠΈΡΡ rac
:
- ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ
- ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
- ΠΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ ΡΠ΅Π°Π½ΡΡ
- Π Π΅ΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΠΏΠ°ΠΌΡΡΡ, CPU)
- Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (IOPS, latency)
- Π‘ΡΠ°ΡΡΡ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠ½ΡΡ
Π·Π°Π΄Π°Π½ΠΈΠΉ
- Π Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
-
ΠΠΈΠ±ΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΎΠΌ ΠΌΠ΅ΡΡΠΈΠΊ:
- ΠΡΠ±ΠΎΡΠΎΡΠ½Π°Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ±ΠΎΡΠ°
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
- Π Π°Π·Π΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠΏΠΎΠ² ΠΌΠ΅ΡΡΠΈΠΊ
-
ΠΠΎΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Grafana
-
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΡΠΆΠ±Ρ (Windows/Linux)

π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
- Go 1.19+ (Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²)
- ΠΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠ»ΠΈΡΠ΅
rac
- Prometheus 2.0+
Π‘ΠΏΠΎΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
-
ΠΠΎΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ:
Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π»ΠΈΠ·
-
Π‘Π±ΠΎΡΠΊΠ° ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²:
git clone https://github.com/LazarenkoA/prometheus_1C_exporter
cd prometheus_1C_exporter
go build -o "1C_exporter"
π ΠΠ°ΠΏΡΡΠΊ
Linux:
./1C_exporter -port=9095 --settings=/path/to/settings.yaml
Windows:
./1C_exporter.exe -port=9095 --settings=/path/to/settings.yaml
ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠ΅ΠΊ examples_settings.yaml
βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Prometheus
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² prometheus.yml
:
scrape_configs:
- job_name: '1c_metrics'
scrape_interval: 30s
metrics_path: '/metrics'
static_configs:
- targets: ['1c-server1:9091', '1c-server2:9091']
ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ: ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠΏΠΎΠ² ΠΌΠ΅ΡΡΠΈΠΊ
scrape_configs:
- job_name: '1c_os_metrics'
scrape_interval: 10s
metrics_path: '/metrics_os'
static_configs:
- targets: ['1c-server1:9091']
- job_name: '1c_rac_metrics'
scrape_interval: 30s
metrics_path: '/metrics_rac'
static_configs:
- targets: ['1c-server1:9091']
π Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΎΠΌ ΠΌΠ΅ΡΡΠΈΠΊ
ΠΠ΅ΡΠΎΠ΄ |
URL-ΡΠΎΡΠΌΠ°Ρ |
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ |
GET |
/Pause |
metricNames offsetMin (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
GET |
/Continue |
metricNames |
ΠΡΠΈΠΌΠ΅ΡΡ:
ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ±ΠΎΡ Π½Π° 5 ΠΌΠΈΠ½ΡΡ:
http://host:9091/Pause?metricNames=processes,connections&offsetMin=5
ΠΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ±ΠΎΡ:
http://host:9091/Continue?metricNames=disk_metrics
π ΠΠ΅ΡΡΠΈΠΊΠΈ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ |
ΠΠ΅ΡΡΠΈΠΊΠΈ |
ΠΠ½Π΄ΠΏΠΎΠΈΠ½Ρ |
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ |
CPU, ΠΏΠ°ΠΌΡΡΡ, Π΄ΠΈΡΠΊΠΈ |
/metrics_os |
RAC-ΠΌΠ΅ΡΡΠΈΠΊΠΈ |
ΠΠΈΡΠ΅Π½Π·ΠΈΠΈ, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΠ΅Π°Π½ΡΡ |
/metrics_rac |
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ |
ΠΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ |
/metrics |
ΠΠ΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ
ΠΠ΅ΡΡΠΈΠΊΠ° |
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ
|
available_performance |
ΠΠΎΡΡΡΠΏΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ
ΠΎΡΡΠ° |
HistogramVec |
sessions_data |
ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠ΅ΡΡΠΈΠΉ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° 1Π‘ |
HistogramVec |
session |
Π‘Π΅ΡΡΠΈΠΈ 1Π‘ |
HistogramVec |
connect |
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ 1Π‘ |
HistogramVec |
client_lic |
ΠΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ 1Π‘ |
HistogramVec |
shedule_job |
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³Π°Π»ΠΊΠΈ "Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠ½ΡΡ
Π·Π°Π΄Π°Π½ΠΈΠΉ", Π΅ΡΠ»ΠΈ Π³Π°Π»ΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ 1 ΠΈΠ½Π°ΡΠ΅ 0 ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ |
Gauge |
cpu |
ΠΠ΅ΡΡΠΈΠΊΠΈ CPU ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅Π½Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°" |
HistogramVec |
processes |
ΠΠ΅ΡΡΠΈΠΊΠΈ CPU/ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² |
HistogramVec |
disk |
ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π΄ΠΈΡΠΊΠΎΠ² |
HistogramVec |
π ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² PromQL
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ:
sum by (licSRV) (client_lic{quantile="0.99", licSRV=~"(?i).+sys.+"})
Π‘ΡΠ΅Π΄Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° CPU:
avg_over_time(CPU{quantile="0.99"} [1m])
ΠΠ°Π³ΡΡΠ·ΠΊΠ° CPU Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²:
topk(10, sum(avg_over_time(Processes{quantile="0.99", metrics="cpu"}[1m])) by (procName) )
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΠΠ£ Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²:
topk(10, sum(avg_over_time(Processes{quantile="0.99", metrics="memoryRSS"}[1m])) by (procName) )
ΠΠΎΡΡΡΠΏΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 1Π‘:
avg_over_time(AvailablePerformance{quantile="0.99"}[10m])
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π°Π½ΡΠΎΠ² Π² 1Π‘:
Session{quantile="0.99"}
β οΈ ΠΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅:
- ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ RAC-ΡΡΠΈΠ»ΠΈΡΡ
- ΠΡΠ°Π²Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
- ΠΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΡΡΡ Π² firewall
- ΠΠΎΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΡΠΎΠ²Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
LogLevel: 5
Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅)