APM: Check endpoint port and team.

pull/3186/head
winlin 2 years ago
parent 6f7b242ce2
commit d4898bec3c

@ -635,10 +635,16 @@ tencentcloud_apm {
# Overwrite by env SRS_TENCENTCLOUD_APM_ENABLED # Overwrite by env SRS_TENCENTCLOUD_APM_ENABLED
# default: off # default: off
enabled on; enabled on;
# The APM token for authentication. See https://console.cloud.tencent.com/apm/monitor/access # The APM team or business system ID, to which spans belongs to. For example, the team is apm-FsOsPOIMl (just an
# example, not available), please get your team from https://console.cloud.tencent.com/apm/monitor/team
# Overwrite by env SRS_TENCENTCLOUD_APM_TEAM
team apm-xxxxxxxxx;
# The APM token for authentication. For example, the token is xzddEaegsxGadEpGEDFx (just an example, not available),
# please get your token from https://console.cloud.tencent.com/apm/monitor/access
# Overwrite by env SRS_TENCENTCLOUD_APM_TOKEN # Overwrite by env SRS_TENCENTCLOUD_APM_TOKEN
token xxxxxxxx; token xxxxxxxx;
# The APM endpoint. See https://github.com/open-telemetry/opentelemetry-go/tree/main/exporters/otlp/otlptrace # The APM endpoint. See https://github.com/open-telemetry/opentelemetry-go/tree/main/exporters/otlp/otlptrace
# Please note that 4317 is for GRPC/HTTP2, while SRS only support HTTP and the port shoule be 55681.
# Overwrite by env SRS_TENCENTCLOUD_APM_ENDPOINT # Overwrite by env SRS_TENCENTCLOUD_APM_ENDPOINT
endpoint ap-guangzhou.apm.tencentcs.com:55681; endpoint ap-guangzhou.apm.tencentcs.com:55681;
# The service.name of resource. # The service.name of resource.

@ -3468,6 +3468,25 @@ bool SrsConfig::get_tencentcloud_apm_enabled()
return SRS_CONF_PERFER_FALSE(conf->arg0()); return SRS_CONF_PERFER_FALSE(conf->arg0());
} }
string SrsConfig::get_tencentcloud_apm_team()
{
SRS_OVERWRITE_BY_ENV_STRING("SRS_TENCENTCLOUD_APM_TEAM");
static string DEFAULT = "";
SrsConfDirective* conf = root->get("tencentcloud_apm");
if (!conf) {
return DEFAULT;
}
conf = conf->get("team");
if (!conf) {
return DEFAULT;
}
return conf->arg0();
}
string SrsConfig::get_tencentcloud_apm_token() string SrsConfig::get_tencentcloud_apm_token()
{ {
SRS_OVERWRITE_BY_ENV_STRING("SRS_TENCENTCLOUD_APM_TOKEN"); SRS_OVERWRITE_BY_ENV_STRING("SRS_TENCENTCLOUD_APM_TOKEN");

@ -470,6 +470,7 @@ public:
virtual std::string get_tencentcloud_cls_endpoint(); virtual std::string get_tencentcloud_cls_endpoint();
virtual std::string get_tencentcloud_cls_topic_id(); virtual std::string get_tencentcloud_cls_topic_id();
virtual bool get_tencentcloud_apm_enabled(); virtual bool get_tencentcloud_apm_enabled();
virtual std::string get_tencentcloud_apm_team();
virtual std::string get_tencentcloud_apm_token(); virtual std::string get_tencentcloud_apm_token();
virtual std::string get_tencentcloud_apm_endpoint(); virtual std::string get_tencentcloud_apm_endpoint();
virtual std::string get_tencentcloud_apm_service_name(); virtual std::string get_tencentcloud_apm_service_name();

@ -1962,7 +1962,7 @@ ISrsApmSpan* SrsApmSpan::set_kind(SrsApmKind kind)
ISrsApmSpan* SrsApmSpan::as_child(ISrsApmSpan* parent) ISrsApmSpan* SrsApmSpan::as_child(ISrsApmSpan* parent)
{ {
// Should be child of different parents. // Should not be child of multiple parent spans.
if (child_) return this; if (child_) return this;
// For child, always load parent from context. // For child, always load parent from context.
@ -2107,16 +2107,40 @@ srs_error_t SrsApmClient::initialize()
return err; return err;
} }
team_ = _srs_config->get_tencentcloud_apm_team();
token_ = _srs_config->get_tencentcloud_apm_token(); token_ = _srs_config->get_tencentcloud_apm_token();
endpoint_ = _srs_config->get_tencentcloud_apm_endpoint(); endpoint_ = _srs_config->get_tencentcloud_apm_endpoint();
service_name_ = _srs_config->get_tencentcloud_apm_service_name(); service_name_ = _srs_config->get_tencentcloud_apm_service_name();
debug_logging_ = _srs_config->get_tencentcloud_apm_debug_logging(); debug_logging_ = _srs_config->get_tencentcloud_apm_debug_logging();
srs_trace("Initialize TencentCloud APM, token=%dB, endpoint=%s, service_name=%s, debug_logging=%d", token_.length(), endpoint_.c_str(), service_name_.c_str(), debug_logging_); srs_trace("Initialize TencentCloud APM, team=%s, token=%dB, endpoint=%s, service_name=%s, debug_logging=%d", team_.c_str(), token_.length(), endpoint_.c_str(), service_name_.c_str(), debug_logging_);
// Check authentication, the team or token.
if (team_.empty()) {
return srs_error_new(ERROR_APM_AUTH, "No authentication team for APM");
}
if (token_.empty()) {
return srs_error_new(ERROR_APM_AUTH, "No authentication token for APM");
}
// Please note that 4317 is for GRPC/HTTP2, while SRS only support HTTP and the port shoule be 55681.
if (srs_string_contains(endpoint_, ":4317")) {
return srs_error_new(ERROR_APM_ENDPOINT, "Port 4317 is for GRPC over HTTP2 for APM");
}
return err; return err;
} }
srs_error_t SrsApmClient::report() srs_error_t SrsApmClient::report()
{
srs_error_t err = do_report();
if (err != srs_success) {
return srs_error_wrap(err, "team=%s, token=%dB", team_.c_str(), token_.length());
}
return err;
}
srs_error_t SrsApmClient::do_report()
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -2133,6 +2157,8 @@ srs_error_t SrsApmClient::report()
rs->resource()->add_addr(SrsOtelAttribute::kv("service.name", service_name_)); rs->resource()->add_addr(SrsOtelAttribute::kv("service.name", service_name_));
// For Tencent Cloud APM authentication, see https://console.cloud.tencent.com/apm/monitor/access // For Tencent Cloud APM authentication, see https://console.cloud.tencent.com/apm/monitor/access
rs->resource()->add_addr(SrsOtelAttribute::kv("token", token_)); rs->resource()->add_addr(SrsOtelAttribute::kv("token", token_));
// For Tencent Cloud APM debugging, see https://console.cloud.tencent.com/apm/monitor/team
rs->resource()->add_addr(SrsOtelAttribute::kv("tapm.team", team_));
SrsOtelScopeSpans* spans = rs->append(); SrsOtelScopeSpans* spans = rs->append();
spans->scope()->name_ = "srs"; spans->scope()->name_ = "srs";
@ -2198,7 +2224,7 @@ srs_error_t SrsApmClient::report()
if (debug_logging_) { if (debug_logging_) {
string server_id = SrsStatistic::instance()->server_id(); string server_id = SrsStatistic::instance()->server_id();
srs_trace("APM write logs=%d, size=%dB, server_id=%s", spans->size(), body.length(), server_id.c_str()); srs_trace("APM write team=%s, token=%dB, logs=%d, size=%dB, server_id=%s", team_.c_str(), token_.length(), spans->size(), body.length(), server_id.c_str());
} }
return err; return err;

@ -493,6 +493,7 @@ class SrsApmClient
private: private:
bool enabled_; bool enabled_;
uint64_t nn_spans_; uint64_t nn_spans_;
std::string team_;
std::string token_; std::string token_;
std::string endpoint_; std::string endpoint_;
std::string service_name_; std::string service_name_;
@ -504,6 +505,9 @@ public:
public: public:
srs_error_t initialize(); srs_error_t initialize();
srs_error_t report(); srs_error_t report();
private:
srs_error_t do_report();
public:
bool enabled(); bool enabled();
uint64_t nn_spans(); uint64_t nn_spans();
public: public:

@ -97,7 +97,9 @@
XX(ERROR_PB_NO_SPACE , 1084, "ProtobufNoSpace", "Failed to encode protobuf for no buffer space left") \ XX(ERROR_PB_NO_SPACE , 1084, "ProtobufNoSpace", "Failed to encode protobuf for no buffer space left") \
XX(ERROR_CLS_INVALID_CONFIG , 1085, "ClsConfig", "Invalid configuration for TencentCloud CLS") \ XX(ERROR_CLS_INVALID_CONFIG , 1085, "ClsConfig", "Invalid configuration for TencentCloud CLS") \
XX(ERROR_CLS_EXCEED_SIZE , 1086, "ClsExceedSize", "CLS logs exceed max size 5MB") \ XX(ERROR_CLS_EXCEED_SIZE , 1086, "ClsExceedSize", "CLS logs exceed max size 5MB") \
XX(ERROR_APM_EXCEED_SIZE , 1087, "ApmExceedSize", "APM logs exceed max size 5MB") XX(ERROR_APM_EXCEED_SIZE , 1087, "ApmExceedSize", "APM logs exceed max size 5MB") \
XX(ERROR_APM_ENDPOINT , 1088, "ApmEndpoint", "APM endpoint is invalid") \
XX(ERROR_APM_AUTH , 1089, "ApmAuth", "APM team or token is invalid") \
/**************************************************/ /**************************************************/
/* RTMP protocol error. */ /* RTMP protocol error. */

Loading…
Cancel
Save