xref: /aosp_15_r20/external/cldr/tools/st-prom-exporter/README.md (revision 912701f9769bb47905792267661f0baf2b85bed5)
1*912701f9SAndroid Build Coastguard Worker# Prom exporter for SurveyTool
2*912701f9SAndroid Build Coastguard Worker
3*912701f9SAndroid Build Coastguard WorkerWhat is this? An exporter for <https://prometheus.io> that reads from the
4*912701f9SAndroid Build Coastguard WorkerSurvey Tool.
5*912701f9SAndroid Build Coastguard Worker
6*912701f9SAndroid Build Coastguard Worker## Planned Obsolescence
7*912701f9SAndroid Build Coastguard Worker
8*912701f9SAndroid Build Coastguard WorkerAs part of [https://unicode-org.atlassian.net/browse/CLDR-14768](CLDR-14768),
9*912701f9SAndroid Build Coastguard Workerthe plan is to move the exporter itself into the SurveyTool.  This will remove the need for
10*912701f9SAndroid Build Coastguard Workera separate exporter instance, and will change the scrape URL to something such as
11*912701f9SAndroid Build Coastguard Worker`/cldr-apps/metrics`.
12*912701f9SAndroid Build Coastguard Worker
13*912701f9SAndroid Build Coastguard Worker## Config/Installation
14*912701f9SAndroid Build Coastguard Worker
15*912701f9SAndroid Build Coastguard Worker1. `npm i`
16*912701f9SAndroid Build Coastguard Worker
17*912701f9SAndroid Build Coastguard Worker2. setup `config.json` as below:
18*912701f9SAndroid Build Coastguard Worker
19*912701f9SAndroid Build Coastguard Worker```json
20*912701f9SAndroid Build Coastguard Worker{
21*912701f9SAndroid Build Coastguard Worker    "instances": {
22*912701f9SAndroid Build Coastguard Worker        "cldr-smoke.unicode.org": "https://cldr-smoke.unicode.org/cldr-apps/SurveyAjax?what=status",
23*912701f9SAndroid Build Coastguard Worker        "st.unicode.org": "https://st.unicode.org/cldr-apps/SurveyAjax?what=status"
24*912701f9SAndroid Build Coastguard Worker    },
25*912701f9SAndroid Build Coastguard Worker    "port": 9099
26*912701f9SAndroid Build Coastguard Worker}
27*912701f9SAndroid Build Coastguard Worker```
28*912701f9SAndroid Build Coastguard Worker
29*912701f9SAndroid Build Coastguard Worker3. `node index.js`
30*912701f9SAndroid Build Coastguard Worker
31*912701f9SAndroid Build Coastguard WorkerNow, the exporter is listening on port 9099 and re-exporting ST metrics as Prometheus metrics.
32*912701f9SAndroid Build Coastguard Worker
33*912701f9SAndroid Build Coastguard Worker### As a service
34*912701f9SAndroid Build Coastguard Worker
35*912701f9SAndroid Build Coastguard WorkerOne possible way to keep the exporter running is to create the file:
36*912701f9SAndroid Build Coastguard Worker
37*912701f9SAndroid Build Coastguard Worker`/lib/systemd/system/prometheus-cldr-surveytool-exporter.service`
38*912701f9SAndroid Build Coastguard Worker
39*912701f9SAndroid Build Coastguard Workerwith the following contents:
40*912701f9SAndroid Build Coastguard Worker
41*912701f9SAndroid Build Coastguard Worker```
42*912701f9SAndroid Build Coastguard Worker[Unit]
43*912701f9SAndroid Build Coastguard WorkerDescription=Prometheus exporter for CLDR SurveyTool
44*912701f9SAndroid Build Coastguard WorkerDocumentation=https://github.com/unicode-org/cldr/tree/main/tools/st-prom-exporter
45*912701f9SAndroid Build Coastguard Worker
46*912701f9SAndroid Build Coastguard Worker[Service]
47*912701f9SAndroid Build Coastguard WorkerRestart=always
48*912701f9SAndroid Build Coastguard WorkerUser=prometheus
49*912701f9SAndroid Build Coastguard WorkerExecStart=/usr/bin/node /usr/local/src/cldr-st-prom-exporter/tools/st-prom-exporter/index.js $ARGS
50*912701f9SAndroid Build Coastguard WorkerExecReload=/bin/kill -HUP $MAINPID
51*912701f9SAndroid Build Coastguard WorkerTimeoutStopSec=20s
52*912701f9SAndroid Build Coastguard WorkerSendSIGKILL=no
53*912701f9SAndroid Build Coastguard Worker
54*912701f9SAndroid Build Coastguard Worker[Install]
55*912701f9SAndroid Build Coastguard WorkerWantedBy=multi-user.target
56*912701f9SAndroid Build Coastguard Worker```
57*912701f9SAndroid Build Coastguard Worker
58*912701f9SAndroid Build Coastguard WorkerNote this assumes a CLDR checkout in `/usr/local/src/cldr-st-prom-exporter` with `config.json` in that directory.
59*912701f9SAndroid Build Coastguard Worker
60*912701f9SAndroid Build Coastguard WorkerThen, as root run:
61*912701f9SAndroid Build Coastguard Worker
62*912701f9SAndroid Build Coastguard Worker```shell
63*912701f9SAndroid Build Coastguard Worker# systemctl enable prometheus-cldr-surveytool-exporter.service
64*912701f9SAndroid Build Coastguard Worker# systemctl start prometheus-cldr-surveytool-exporter.service
65*912701f9SAndroid Build Coastguard Worker# systemctl status prometheus-cldr-surveytool-exporter.service
66*912701f9SAndroid Build Coastguard Worker```
67*912701f9SAndroid Build Coastguard Worker
68*912701f9SAndroid Build Coastguard Worker## Integration
69*912701f9SAndroid Build Coastguard Worker
70*912701f9SAndroid Build Coastguard WorkerHere is an example prometheus.yml scrape config:
71*912701f9SAndroid Build Coastguard Worker
72*912701f9SAndroid Build Coastguard Worker```yaml
73*912701f9SAndroid Build Coastguard Worker  - job_name: 'st'
74*912701f9SAndroid Build Coastguard Worker    scrape_interval: 2m
75*912701f9SAndroid Build Coastguard Worker    scrape_timeout: 2m
76*912701f9SAndroid Build Coastguard Worker    static_configs:
77*912701f9SAndroid Build Coastguard Worker      - targets: ['localhost:9909']
78*912701f9SAndroid Build Coastguard Worker    metric_relabel_configs:
79*912701f9SAndroid Build Coastguard Worker      - source_labels: [exported_instance]
80*912701f9SAndroid Build Coastguard Worker        target_label: instance
81*912701f9SAndroid Build Coastguard Worker```
82*912701f9SAndroid Build Coastguard Worker
83*912701f9SAndroid Build Coastguard WorkerHere is an alert rule to see that the surveytool is not busted:
84*912701f9SAndroid Build Coastguard Worker
85*912701f9SAndroid Build Coastguard Worker```yaml
86*912701f9SAndroid Build Coastguard Worker  - name: surveytool
87*912701f9SAndroid Build Coastguard Worker    rules:
88*912701f9SAndroid Build Coastguard Worker      - alert: surveytool_busted
89*912701f9SAndroid Build Coastguard Worker        expr: surveytool_busted == 1
90*912701f9SAndroid Build Coastguard Worker        for: 5m
91*912701f9SAndroid Build Coastguard Worker        annotations:
92*912701f9SAndroid Build Coastguard Worker          summary: "Survey Tool Busted on {{ $labels.exported_instance }}"
93*912701f9SAndroid Build Coastguard Worker          description: "Survey Tool Busted: {{ $labels.exported_instance }}, Err: {{ $labels.err}}"
94*912701f9SAndroid Build Coastguard Worker```
95*912701f9SAndroid Build Coastguard Worker
96*912701f9SAndroid Build Coastguard WorkerAnd here is an alert rule to make sure the exporter itself is up.
97*912701f9SAndroid Build Coastguard Worker
98*912701f9SAndroid Build Coastguard Worker```yaml
99*912701f9SAndroid Build Coastguard Worker  - name: instances
100*912701f9SAndroid Build Coastguard Worker    rules:
101*912701f9SAndroid Build Coastguard Worker      - alert: ScraperDown
102*912701f9SAndroid Build Coastguard Worker        expr: up{job="st"} == 0
103*912701f9SAndroid Build Coastguard Worker        for: 5m
104*912701f9SAndroid Build Coastguard Worker        labels:
105*912701f9SAndroid Build Coastguard Worker          severity: page
106*912701f9SAndroid Build Coastguard Worker        annotations:
107*912701f9SAndroid Build Coastguard Worker          summary: "Scraper for{{ $labels.job }} down"
108*912701f9SAndroid Build Coastguard Worker          description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 30 minutes."
109*912701f9SAndroid Build Coastguard Worker```
110*912701f9SAndroid Build Coastguard Worker
111*912701f9SAndroid Build Coastguard Worker## License and Copyright
112*912701f9SAndroid Build Coastguard Worker
113*912701f9SAndroid Build Coastguard Worker©2020 Unicode, Inc. All Rights Reserved.
114*912701f9SAndroid Build Coastguard Worker
115*912701f9SAndroid Build Coastguard WorkerFor license and copyright see
116*912701f9SAndroid Build Coastguard Workerhttps://www.unicode.org/copyright.html
117*912701f9SAndroid Build Coastguard Workeror [../../LICENSE](../../LICENSE)
118