@emeryld/obs-stack 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -115,9 +115,10 @@ Each datasource now exposes a stable `uid` (`loki` and `tempo`) so the shipping
115
115
 
116
116
  We also preload three starter dashboards via `grafana/provisioning/dashboards/`. Each JSON file targets the Loki datasource (uid `loki`) so they work out of the box:
117
117
 
118
- - **Logs overview**: table-based log stream plus a severity breakout to spot noisy services that are emitting within the selected time range.
118
+ - **Logs overview**: table-based log stream plus a severity breakout to spot noisy services that are emitting within the selected time range; the bottom table also shows the modules that currently produce the most log volume.
119
119
  - **Error spotlight**: graph of error rate per service, a recent error table, and a quick stat showing how many error events arrived over the past five minutes.
120
120
  - **Service telemetry**: log rate by logger namespace, the top namespaces by volume, and a traced-log ratio that highlights how many records still carry `trace_id`.
121
+ The dashboard also now surfaces request throughput per route and a cache hit ratio stat so you can compare HTTP behavior and cache effectiveness without building ad-hoc panels.
121
122
 
122
123
  Edit the JSON in `grafana/provisioning/dashboards/files/` (or export updates from Grafana) and restart the stack or reload dashboards to see your changes automatically.
123
124
 
@@ -122,6 +122,58 @@
122
122
  "title": "Log rate by severity",
123
123
  "type": "timeseries"
124
124
  }
125
+ ,
126
+ {
127
+ "datasource": {
128
+ "type": "loki",
129
+ "uid": "loki"
130
+ },
131
+ "fieldConfig": {
132
+ "defaults": {
133
+ "custom": {},
134
+ "mappings": [],
135
+ "thresholds": {
136
+ "mode": "absolute",
137
+ "steps": [
138
+ {
139
+ "color": "green",
140
+ "value": null
141
+ }
142
+ ]
143
+ }
144
+ },
145
+ "overrides": []
146
+ },
147
+ "gridPos": {
148
+ "h": 8,
149
+ "w": 12,
150
+ "x": 0,
151
+ "y": 20
152
+ },
153
+ "id": 3,
154
+ "options": {
155
+ "showHeader": true,
156
+ "sortBy": [
157
+ {
158
+ "desc": true,
159
+ "displayName": "Value"
160
+ }
161
+ ]
162
+ },
163
+ "targets": [
164
+ {
165
+ "datasource": {
166
+ "type": "loki",
167
+ "uid": "loki"
168
+ },
169
+ "expr": "topk(5, sum by (module) (count_over_time({module!=\"\"}[5m])))",
170
+ "queryType": "range",
171
+ "refId": "A"
172
+ }
173
+ ],
174
+ "title": "Top modules by log volume",
175
+ "type": "table"
176
+ }
125
177
  ],
126
178
  "refresh": "15s",
127
179
  "schemaVersion": 38,
@@ -164,6 +164,96 @@
164
164
  "title": "Traced logs",
165
165
  "type": "stat"
166
166
  }
167
+ ,
168
+ {
169
+ "datasource": {
170
+ "type": "loki",
171
+ "uid": "loki"
172
+ },
173
+ "fieldConfig": {
174
+ "defaults": {
175
+ "custom": {},
176
+ "mappings": [],
177
+ "unit": "reqps"
178
+ },
179
+ "overrides": []
180
+ },
181
+ "gridPos": {
182
+ "h": 8,
183
+ "w": 12,
184
+ "x": 0,
185
+ "y": 20
186
+ },
187
+ "id": 4,
188
+ "options": {
189
+ "legend": {
190
+ "displayMode": "list",
191
+ "placement": "bottom"
192
+ },
193
+ "tooltip": {
194
+ "mode": "single"
195
+ }
196
+ },
197
+ "targets": [
198
+ {
199
+ "datasource": {
200
+ "type": "loki",
201
+ "uid": "loki"
202
+ },
203
+ "expr": "sum(rate({http.route!=\"\", service_name=~\"$service_name\"}[1m])) by (http.route)",
204
+ "queryType": "range",
205
+ "refId": "A"
206
+ }
207
+ ],
208
+ "title": "Request rate by route",
209
+ "type": "timeseries"
210
+ }
211
+ ,
212
+ {
213
+ "datasource": {
214
+ "type": "loki",
215
+ "uid": "loki"
216
+ },
217
+ "fieldConfig": {
218
+ "defaults": {
219
+ "custom": {},
220
+ "mappings": [],
221
+ "unit": "percent"
222
+ },
223
+ "overrides": []
224
+ },
225
+ "gridPos": {
226
+ "h": 4,
227
+ "w": 12,
228
+ "x": 0,
229
+ "y": 28
230
+ },
231
+ "id": 5,
232
+ "options": {
233
+ "orientation": "horizontal",
234
+ "reduceOptions": {
235
+ "calcs": [
236
+ "mean"
237
+ ],
238
+ "fields": "",
239
+ "values": false
240
+ },
241
+ "textMode": "auto"
242
+ },
243
+ "targets": [
244
+ {
245
+ "datasource": {
246
+ "type": "loki",
247
+ "uid": "loki"
248
+ },
249
+ "expr": "sum(count_over_time({cache.system!=\"\", cache.hit=\"true\", service_name=~\"$service_name\"}[5m])) / sum(count_over_time({cache.system!=\"\", service_name=~\"$service_name\"}[5m])) * 100",
250
+ "queryType": "range",
251
+ "refId": "A"
252
+ }
253
+ ],
254
+ "title": "Cache hit ratio",
255
+ "type": "stat"
256
+ }
167
257
  ],
168
258
  "refresh": "10s",
169
259
  "schemaVersion": 38,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@emeryld/obs-stack",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Docker Compose-based Grafana + Tempo + Loki + OpenTelemetry Collector stack",
5
5
  "type": "commonjs",
6
6
  "bin": {