Skip to content

Commit

Permalink
Merge pull request #46 from shiguredo/feature/sora-2024.2
Browse files Browse the repository at this point in the history
Sora 2024.2 対応
  • Loading branch information
tnamao authored Dec 18, 2024
2 parents 856c575 + 446fd45 commit 3ba6d27
Show file tree
Hide file tree
Showing 15 changed files with 402 additions and 56 deletions.
34 changes: 31 additions & 3 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,42 @@

## develop

- [CHANGE] クラスターメトリクスを収集する際の `ListClusterNodes` API の呼び出し時にリクエストパラメータの指定を削除する
- 破壊的変更になるため、バージョンアップの際に注意してください
- Sora 2024.2.0 での `include_all_known_nodes` パラメータ廃止への対応です
- Sora 2023.2 以前と Sora 2024.1 以降で、exporter が返すメトリクスの結果が変わります
- @tnamao
- [ADD] SRTP 統計情報を追加する
- Sora API の GetStatsReport API から取得可能な SRTP 統計情報を以下のメトリクス名で追加する
- `sora_srtp_received_packets_total`
- `sora_srtp_received_bytes_total`
- `sora_srtp_sent_packets_total`
- `sora_srtp_sent_bytes_total`
- `sora_srtp_decrypted_packets_total`
- `sora_srtp_decrypted_bytes_total`
- @tnamao
- [ADD] SCTP 統計情報を追加する
- Sora API の GetStatsReport API から取得可能な SCTP 統計情報を以下のメトリクス名で追加する
- `sora_sctp_received_packets_total`
- `sora_sctp_received_bytes_total`
- `sora_sctp_sent_packets_total`
- `sora_sctp_sent_bytes_total`
- @tnamao
- [ADD] 無視されたウェブフック数の統計情報を追加する
- Sora API の GetStatsReport API から取得可能な無視されたウェブフック数を以下のメトリクス名で追加する
- 既存の以下のメトリクスの `state` ラベルに `ignored` で値を返す
- `sora_event_webhook_total`
- `sora_session_webhook_total`
- `sora_stats_webhook_total`
- @tnamao
- [CHANGE] ログライブラリの変更
- `prometheus/exporter-toolkit` の依存ログライブラリが `go-kit/log` から Go 言語標準ライブラリの `log/slog` に変更されたため、Sora expoter 内で使用しているロガーも `log/slog` に切り替える
- 同様にテストコードで使用していた `NewNopLogger` は代替として `slog.New(slog.NewTextHandler(io.Discard, nil))` を使用する形に変更する
- @tnamao
- [UPDATE] 依存パッケージを更新する
- prometheus/client_golang 1.19.1 => 1.20.4
- prometheus/common 0.54.0 => 0.59.1
- prometheus/exporter-toolkit 0.11.0 => 0.13.0
- prometheus/client_golang 1.19.1 => 1.20.5
- prometheus/common 0.54.0 => 0.61.0
- prometheus/exporter-toolkit 0.11.0 => 0.13.2
- `prometheus/exporter-toolkit` のログライブラリ切り替えにより `go-kit/log` への依存はなくなりました
- @tnamao
- [UPDATE] Go を 1.23 に上げる
Expand Down
25 changes: 9 additions & 16 deletions collector/collector.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package collector

import (
"bytes"
"context"
"crypto/tls"
"encoding/json"
Expand Down Expand Up @@ -36,6 +35,8 @@ type Collector struct {

ConnectionMetrics
WebhookMetrics
SrtpMetrics
SctpMetrics
ClientMetrics
SoraConnectionErrorMetrics
ErlangVMMetrics
Expand All @@ -59,10 +60,6 @@ type HTTPClient interface {
Do(*http.Request) (*http.Response, error)
}

type SoraListClusterNodesRequest struct {
IncludeAllKnownNodes bool `json:"include_all_known_nodes"`
}

func NewCollector(options *CollectorOptions) *Collector {
return &Collector{
URI: options.URI,
Expand All @@ -85,6 +82,8 @@ func NewCollector(options *CollectorOptions) *Collector {

ConnectionMetrics: connectionMetrics,
WebhookMetrics: webhookMetrics,
SrtpMetrics: srtpMetrics,
SctpMetrics: sctpMetrics,
ClientMetrics: clientMetrics,
SoraConnectionErrorMetrics: soraConnectionErrorMetrics,
ErlangVMMetrics: erlangVMMetrics,
Expand Down Expand Up @@ -131,17 +130,7 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {

var nodeList []soraClusterNode
if c.EnableSoraClusterMetrics {
requestParams := SoraListClusterNodesRequest{
IncludeAllKnownNodes: true,
}
encodedParams, err := json.Marshal(requestParams)
if err != nil {
c.logger.Error("failed to encode Sora ListClusterNodes API request parameters", "err", err)
ch <- newGauge(c.soraUp, 0)
return
}

req, err = http.NewRequestWithContext(ctx, http.MethodPost, c.URI, bytes.NewBuffer(encodedParams))
req, err = http.NewRequestWithContext(ctx, http.MethodPost, c.URI, nil)
if err != nil {
c.logger.Error("failed to create request to sora", "err", err.Error())
ch <- newGauge(c.soraUp, 0)
Expand Down Expand Up @@ -200,6 +189,8 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
c.LicenseMetrics.Collect(ch, licenseInfo)
c.ConnectionMetrics.Collect(ch, report.soraConnectionReport)
c.WebhookMetrics.Collect(ch, report.soraWebhookReport)
c.SrtpMetrics.Collect(ch, report.soraSrtpReport)
c.SctpMetrics.Collect(ch, report.soraSctpReport)

if c.enableSoraClientMetrics {
c.ClientMetrics.Collect(ch, report.SoraClientReport)
Expand All @@ -222,6 +213,8 @@ func (c *Collector) Describe(ch chan<- *prometheus.Desc) {
c.LicenseMetrics.Describe(ch)
c.ConnectionMetrics.Describe(ch)
c.WebhookMetrics.Describe(ch)
c.SrtpMetrics.Describe(ch)
c.SctpMetrics.Describe(ch)

if c.enableSoraClientMetrics {
c.ClientMetrics.Describe(ch)
Expand Down
33 changes: 33 additions & 0 deletions collector/sctp.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package collector

import "github.com/prometheus/client_golang/prometheus"

var (
sctpMetrics = SctpMetrics{
totalReceivedSctp: newDesc("sctp_received_packets_total", "The total number of received SCTP packets."),
totalReceivedSctpByteSize: newDesc("sctp_received_bytes_total", "The total number of received SCTP bytes."),
totalSentSctp: newDesc("sctp_sent_packets_total", "The total number of sent SCTP packets."),
totalSentSctpByteSize: newDesc("sctp_sent_bytes_total", "The total number of sent SCTP bytes."),
}
)

type SctpMetrics struct {
totalReceivedSctp *prometheus.Desc
totalReceivedSctpByteSize *prometheus.Desc
totalSentSctp *prometheus.Desc
totalSentSctpByteSize *prometheus.Desc
}

func (m *SctpMetrics) Describe(ch chan<- *prometheus.Desc) {
ch <- m.totalReceivedSctp
ch <- m.totalReceivedSctpByteSize
ch <- m.totalSentSctp
ch <- m.totalSentSctpByteSize
}

func (m *SctpMetrics) Collect(ch chan<- prometheus.Metric, report soraSctpReport) {
ch <- newCounter(m.totalReceivedSctp, float64(report.TotalReceivedSctp))
ch <- newCounter(m.totalReceivedSctpByteSize, float64(report.TotalReceivedSctpByteSize))
ch <- newCounter(m.totalSentSctp, float64(report.TotalSentSctp))
ch <- newCounter(m.totalSentSctpByteSize, float64(report.TotalSentSctpByteSize))
}
21 changes: 21 additions & 0 deletions collector/sora_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ type soraGetStatsReport struct {
SoraVersion string `json:"version"`
soraConnectionReport
soraWebhookReport
soraSrtpReport
soraSctpReport
SoraClientReport soraClientReport `json:"sora_client,omitempty"`
SoraConnectionErrorReport soraConnectionErrorReport `json:"error,omitempty"`
ErlangVMReport erlangVMReport `json:"erlang_vm,omitempty"`
Expand Down Expand Up @@ -35,10 +37,29 @@ type soraWebhookReport struct {
TotalFailedAuthWebhook int64 `json:"total_failed_auth_webhook"`
TotalSuccessfulSessionWebhook int64 `json:"total_successful_session_webhook"`
TotalFailedSessionWebhook int64 `json:"total_failed_session_webhook"`
TotalIgnoredSessionWebhook int64 `json:"total_ignored_session_webhook"`
TotalSuccessfulEventWebhook int64 `json:"total_successful_event_webhook"`
TotalFailedEventWebhook int64 `json:"total_failed_event_webhook"`
TotalIgnoredEventWebhook int64 `json:"total_ignored_event_webhook"`
TotalSuccessfulStatsWebhook int64 `json:"total_successful_stats_webhook"`
TotalFailedStatsWebhook int64 `json:"total_failed_stats_webhook"`
TotalIgnoredStatsWebhook int64 `json:"total_ignored_stats_webhook"`
}

type soraSrtpReport struct {
TotalReceivedSrtp int64 `json:"total_received_srtp"`
TotalReceivedSrtpByteSize int64 `json:"total_received_srtp_byte_size"`
TotalSentSrtp int64 `json:"total_sent_srtp"`
TotalSentSrtpByteSize int64 `json:"total_sent_srtp_byte_size"`
TotalDecryptedSrtp int64 `json:"total_decrypted_srtp"`
TotalDecryptedSrtpByteSize int64 `json:"total_decrypted_srtp_byte_size"`
}

type soraSctpReport struct {
TotalReceivedSctp int64 `json:"total_received_sctp"`
TotalReceivedSctpByteSize int64 `json:"total_received_sctp_byte_size"`
TotalSentSctp int64 `json:"total_sent_sctp"`
TotalSentSctpByteSize int64 `json:"total_sent_sctp_byte_size"`
}

type soraClientStatistics struct {
Expand Down
41 changes: 41 additions & 0 deletions collector/srtp.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package collector

import "github.com/prometheus/client_golang/prometheus"

var (
srtpMetrics = SrtpMetrics{
totalReceivedSrtp: newDesc("srtp_received_packets_total", "The total number of received SRTP packets."),
totalReceivedSrtpByteSize: newDesc("srtp_received_bytes_total", "The total number of received SRTP bytes."),
totalSentSrtp: newDesc("srtp_sent_packets_total", "The total number of sent SRTP packets."),
totalSentSrtpByteSize: newDesc("srtp_sent_bytes_total", "The total number of sent SRTP bytes."),
totalDecryptedSrtp: newDesc("srtp_decrypted_packets_total", "The total number of decrpyted SRTP packets."),
totalDecryptedSrtpByteSize: newDesc("srtp_decrpyted_bytes_total", "The total number of decrypted SRTP bytes."),
}
)

type SrtpMetrics struct {
totalReceivedSrtp *prometheus.Desc
totalReceivedSrtpByteSize *prometheus.Desc
totalSentSrtp *prometheus.Desc
totalSentSrtpByteSize *prometheus.Desc
totalDecryptedSrtp *prometheus.Desc
totalDecryptedSrtpByteSize *prometheus.Desc
}

func (m *SrtpMetrics) Describe(ch chan<- *prometheus.Desc) {
ch <- m.totalReceivedSrtp
ch <- m.totalReceivedSrtpByteSize
ch <- m.totalSentSrtp
ch <- m.totalSentSrtpByteSize
ch <- m.totalDecryptedSrtp
ch <- m.totalDecryptedSrtpByteSize
}

func (m *SrtpMetrics) Collect(ch chan<- prometheus.Metric, report soraSrtpReport) {
ch <- newCounter(m.totalReceivedSrtp, float64(report.TotalReceivedSrtp))
ch <- newCounter(m.totalReceivedSrtpByteSize, float64(report.TotalReceivedSrtpByteSize))
ch <- newCounter(m.totalSentSrtp, float64(report.TotalSentSrtp))
ch <- newCounter(m.totalSentSrtpByteSize, float64(report.TotalSentSrtpByteSize))
ch <- newCounter(m.totalDecryptedSrtp, float64(report.TotalDecryptedSrtp))
ch <- newCounter(m.totalDecryptedSrtpByteSize, float64(report.TotalDecryptedSrtpByteSize))
}
3 changes: 3 additions & 0 deletions collector/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,11 @@ func (m *WebhookMetrics) Collect(ch chan<- prometheus.Metric, report soraWebhook
ch <- newCounter(m.totalAuthWebhook, float64(report.TotalFailedAuthWebhook), "failed")
ch <- newCounter(m.totalSessionWebhook, float64(report.TotalSuccessfulSessionWebhook), "successful")
ch <- newCounter(m.totalSessionWebhook, float64(report.TotalFailedSessionWebhook), "failed")
ch <- newCounter(m.totalSessionWebhook, float64(report.TotalIgnoredSessionWebhook), "ignored")
ch <- newCounter(m.totalEventWebhook, float64(report.TotalSuccessfulEventWebhook), "successful")
ch <- newCounter(m.totalEventWebhook, float64(report.TotalFailedEventWebhook), "failed")
ch <- newCounter(m.totalEventWebhook, float64(report.TotalIgnoredEventWebhook), "ignored")
ch <- newCounter(m.totalStatsWebhook, float64(report.TotalSuccessfulStatsWebhook), "successful")
ch <- newCounter(m.totalStatsWebhook, float64(report.TotalFailedStatsWebhook), "failed")
ch <- newCounter(m.totalStatsWebhook, float64(report.TotalIgnoredStatsWebhook), "ignored")
}
24 changes: 12 additions & 12 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ go 1.23

require (
github.com/alecthomas/kingpin/v2 v2.4.0
github.com/prometheus/client_golang v1.20.4
github.com/prometheus/common v0.59.1
github.com/prometheus/exporter-toolkit v0.13.0
github.com/prometheus/client_golang v1.20.5
github.com/prometheus/common v0.61.0
github.com/prometheus/exporter-toolkit v0.13.2
)

require (
github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/klauspost/compress v1.17.10 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/mdlayher/socket v0.5.1 // indirect
github.com/mdlayher/vsock v1.2.1 // indirect
Expand All @@ -24,12 +24,12 @@ require (
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
golang.org/x/crypto v0.27.0 // indirect
golang.org/x/net v0.29.0 // indirect
golang.org/x/oauth2 v0.23.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/sys v0.25.0 // indirect
golang.org/x/text v0.18.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
golang.org/x/crypto v0.31.0 // indirect
golang.org/x/net v0.32.0 // indirect
golang.org/x/oauth2 v0.24.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
google.golang.org/protobuf v1.36.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
Loading

0 comments on commit 3ba6d27

Please sign in to comment.