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