8000 feat: expose app insights as Prometheus metrics by mtojek · Pull Request #10346 · coder/coder · GitHub
[go: up one dir, main page]

Skip to content

feat: expose app insights as Prometheus metrics #10346

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Nov 7, 2023
Merged
Prev Previous commit
Slug included
  • Loading branch information
mtojek committed Nov 7, 2023
commit 890511cc11f204a5c2cdb6548bad766ae279fc3e
1 change: 1 addition & 0 deletions coderd/database/dbmem/dbmem.go
Original file line number Diff line number Diff line change
Expand Up @@ -2452,6 +2452,7 @@ func (q *FakeQuerier) GetTemplateAppInsightsByTemplate(ctx context.Context, arg
r := database.GetTemplateAppInsightsByTemplateRow{
TemplateID: usageKey.TemplateID,
DisplayName: sql.NullString{String: usageKey.DisplayName, Valid: true},
SlugOrPort: usageKey.Slug,
}
for _, mUserUsage := range usageByTemplateAppUser[usageKey] {
r.ActiveUsers += int64(len(mUserUsage))
Expand Down
5 changes: 4 additions & 1 deletion coderd/database/queries.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion coderd/database/queries/insights.sql
Original file line number Diff line number Diff line change
Expand Up @@ -258,11 +258,12 @@ WITH app_stats_by_user_and_agent AS (
SELECT
template_id,
display_name,
slug_or_port,
COALESCE(COUNT(DISTINCT user_id))::bigint AS active_users,
SUM(seconds) AS usage_seconds
FROM app_stats_by_user_and_agent
WHERE is_app IS TRUE
GROUP BY template_id, display_name;
GROUP BY template_id, display_name, slug_or_port;

-- name: GetTemplateInsightsByInterval :many
-- GetTemplateInsightsByInterval returns all intervals between start and end
Expand Down
17 changes: 11 additions & 6 deletions coderd/prometheusmetrics/insights/metricscollector.go
8000
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (

var (
templatesActiveUsersDesc = prometheus.NewDesc("coderd_insights_templates_active_users", "The number of active users of the template.", []string{"template_name"}, nil)
applicationsUsageSecondsDesc = prometheus.NewDesc("coderd_insights_applications_usage_seconds", "The application usage per template.", []string{"template_name", "application_name"}, nil)
applicationsUsageSecondsDesc = prometheus.NewDesc("coderd_insights_applications_usage_seconds", "The application usage per template.", []string{"template_name", "application_name", "slug"}, nil)
)

type MetricsCollector struct {
Expand Down Expand Up @@ -165,30 +165,35 @@ func (mc *MetricsCollector) Collect(metricsCh chan<- prometheus.Metric) {

// Custom apps
for _, appRow := range data.apps {
metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue, float64(appRow.UsageSeconds), data.templateNames[appRow.TemplateID], appRow.DisplayName.String)
metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue, float64(appRow.UsageSeconds), data.templateNames[appRow.TemplateID],
appRow.DisplayName.String, appRow.SlugOrPort)
}

// Built-in apps
for _, templateRow := range data.templates {
metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue,
float64(templateRow.UsageVscodeSeconds),
data.templateNames[templateRow.TemplateID],
codersdk.TemplateBuiltinAppDisplayNameVSCode)
codersdk.TemplateBuiltinAppDisplayNameVSCode,
"")

metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue,
float64(templateRow.UsageJetbrainsSeconds),
data.templateNames[templateRow.TemplateID],
codersdk.TemplateBuiltinAppDisplayNameJetBrains)
codersdk.TemplateBuiltinAppDisplayNameJetBrains,
"")

metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue,
float64(templateRow.UsageReconnectingPtySeconds),
data.templateNames[templateRow.TemplateID],
codersdk.TemplateBuiltinAppDisplayNameWebTerminal)
codersdk.TemplateBuiltinAppDisplayNameWebTerminal,
"")

metricsCh <- prometheus.MustNewConstMetric(applicationsUsageSecondsDesc, prometheus.GaugeValue,
float64(templateRow.UsageSshSeconds),
data.templateNames[templateRow.TemplateID],
codersdk.TemplateBuiltinAppDisplayNameSSH)
codersdk.TemplateBuiltinAppDisplayNameSSH,
"")
}

// Templates
Expand Down
10 changes: 5 additions & 5 deletions coderd/prometheusmetrics/insights/testdata/insights-metrics.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"coderd_insights_applications_usage_seconds[application_name=JetBrains,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=Visual Studio Code,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=Web Terminal,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=SSH,template_name=golden-template]": 60,
"coderd_insights_applications_usage_seconds[application_name=Golden Slug,template_name=golden-template]": 180,
"coderd_insights_applications_usage_seconds[application_name=JetBrains,slug=,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=Visual Studio Code,slug=,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=Web Terminal,slug=,template_name=golden-template]": 0,
"coderd_insights_applications_usage_seconds[application_name=SSH,slug=,template_name=golden-template]": 60,
"coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]": 180,
"coderd_insights_templates_active_users[template_name=golden-template]": 1
}
0