mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Exporter: Listen at port 9972 for Prometheus exporter. (#3195)
This commit is contained in:
parent
4ad4dd0975
commit
9525511032
7 changed files with 105 additions and 4 deletions
|
@ -664,6 +664,11 @@ exporter {
|
||||||
# Overwrite by env SRS_EXPORTER_ENABLED
|
# Overwrite by env SRS_EXPORTER_ENABLED
|
||||||
# Default: off
|
# Default: off
|
||||||
enabled off;
|
enabled off;
|
||||||
|
# The http api listen port for exporter metrics.
|
||||||
|
# Overwrite by env SRS_EXPORTER_LISTEN
|
||||||
|
# Default: 9972
|
||||||
|
# See https://github.com/prometheus/prometheus/wiki/Default-port-allocations
|
||||||
|
listen 9972;
|
||||||
# The logging label to category the cluster servers.
|
# The logging label to category the cluster servers.
|
||||||
# Overwrite by env SRS_EXPORTER_LABEL
|
# Overwrite by env SRS_EXPORTER_LABEL
|
||||||
label cn-beijing;
|
label cn-beijing;
|
||||||
|
|
44
trunk/conf/prometheus.conf
Normal file
44
trunk/conf/prometheus.conf
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# no-daemon and write log to console config for srs.
|
||||||
|
# @see full.conf for detail config.
|
||||||
|
|
||||||
|
listen 1935;
|
||||||
|
max_connections 1000;
|
||||||
|
daemon off;
|
||||||
|
srs_log_tank console;
|
||||||
|
http_api {
|
||||||
|
enabled on;
|
||||||
|
listen 1985;
|
||||||
|
}
|
||||||
|
http_server {
|
||||||
|
enabled on;
|
||||||
|
listen 8080;
|
||||||
|
}
|
||||||
|
rtc_server {
|
||||||
|
enabled on;
|
||||||
|
listen 8000; # UDP port
|
||||||
|
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
|
||||||
|
candidate $CANDIDATE;
|
||||||
|
}
|
||||||
|
# Prometheus exporter config.
|
||||||
|
exporter {
|
||||||
|
enabled on;
|
||||||
|
listen 9972;
|
||||||
|
label cn-beijing;
|
||||||
|
tag cn-edge;
|
||||||
|
}
|
||||||
|
vhost __defaultVhost__ {
|
||||||
|
hls {
|
||||||
|
enabled on;
|
||||||
|
}
|
||||||
|
http_remux {
|
||||||
|
enabled on;
|
||||||
|
mount [vhost]/[app]/[stream].flv;
|
||||||
|
}
|
||||||
|
rtc {
|
||||||
|
enabled on;
|
||||||
|
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
|
||||||
|
rtmp_to_rtc on;
|
||||||
|
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
|
||||||
|
rtc_to_rtmp on;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2305,6 +2305,15 @@ srs_error_t SrsConfig::check_normal_config()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (true) {
|
||||||
|
SrsConfDirective* conf = root->get("exporter");
|
||||||
|
for (int i = 0; conf && i < (int)conf->directives.size(); i++) {
|
||||||
|
string n = conf->at(i)->name;
|
||||||
|
if (n != "enabled" && n != "listen" && n != "label" && n != "tag") {
|
||||||
|
return srs_error_new(ERROR_SYSTEM_CONFIG_INVALID, "illegal exporter.%s", n.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// check listen for rtmp.
|
// check listen for rtmp.
|
||||||
|
@ -3583,6 +3592,25 @@ bool SrsConfig::get_exporter_enabled()
|
||||||
return SRS_CONF_PERFER_FALSE(conf->arg0());
|
return SRS_CONF_PERFER_FALSE(conf->arg0());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string SrsConfig::get_exporter_listen()
|
||||||
|
{
|
||||||
|
SRS_OVERWRITE_BY_ENV_STRING("SRS_EXPORTER_LISTEN");
|
||||||
|
|
||||||
|
static string DEFAULT = "9972";
|
||||||
|
|
||||||
|
SrsConfDirective* conf = root->get("exporter");
|
||||||
|
if (!conf) {
|
||||||
|
return DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
conf = conf->get("listen");
|
||||||
|
if (!conf) {
|
||||||
|
return DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return conf->arg0();
|
||||||
|
}
|
||||||
|
|
||||||
string SrsConfig::get_exporter_label()
|
string SrsConfig::get_exporter_label()
|
||||||
{
|
{
|
||||||
SRS_OVERWRITE_BY_ENV_STRING("SRS_EXPORTER_LABEL");
|
SRS_OVERWRITE_BY_ENV_STRING("SRS_EXPORTER_LABEL");
|
||||||
|
|
|
@ -1089,6 +1089,7 @@ public:
|
||||||
public:
|
public:
|
||||||
// Get Prometheus exporter config.
|
// Get Prometheus exporter config.
|
||||||
virtual bool get_exporter_enabled();
|
virtual bool get_exporter_enabled();
|
||||||
|
virtual std::string get_exporter_listen();
|
||||||
virtual std::string get_exporter_label();
|
virtual std::string get_exporter_label();
|
||||||
virtual std::string get_exporter_tag();
|
virtual std::string get_exporter_tag();
|
||||||
};
|
};
|
||||||
|
|
|
@ -87,7 +87,9 @@ srs_error_t srs_api_response_json(ISrsHttpResponseWriter* w, string data)
|
||||||
SrsHttpHeader* h = w->header();
|
SrsHttpHeader* h = w->header();
|
||||||
|
|
||||||
h->set_content_length(data.length());
|
h->set_content_length(data.length());
|
||||||
h->set_content_type("application/json");
|
if (h->content_type().empty()) {
|
||||||
|
h->set_content_type("application/json");
|
||||||
|
}
|
||||||
|
|
||||||
if ((err = w->write((char*)data.data(), (int)data.length())) != srs_success) {
|
if ((err = w->write((char*)data.data(), (int)data.length())) != srs_success) {
|
||||||
return srs_error_wrap(err, "write json");
|
return srs_error_wrap(err, "write json");
|
||||||
|
@ -1153,5 +1155,7 @@ srs_error_t SrsGoApiMetrics::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
<< nerrs
|
<< nerrs
|
||||||
<< "\n";
|
<< "\n";
|
||||||
|
|
||||||
|
w->header()->set_content_type("text/plain; charset=utf-8");
|
||||||
|
|
||||||
return srs_api_response(w, r, ss.str());
|
return srs_api_response(w, r, ss.str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -335,6 +335,7 @@ SrsServer::SrsServer()
|
||||||
webrtc_listener_ = new SrsTcpListener(this);
|
webrtc_listener_ = new SrsTcpListener(this);
|
||||||
stream_caster_flv_listener_ = new SrsHttpFlvListener();
|
stream_caster_flv_listener_ = new SrsHttpFlvListener();
|
||||||
stream_caster_mpegts_ = new SrsUdpCasterListener();
|
stream_caster_mpegts_ = new SrsUdpCasterListener();
|
||||||
|
exporter_listener_ = new SrsTcpListener(this);
|
||||||
|
|
||||||
// donot new object in constructor,
|
// donot new object in constructor,
|
||||||
// for some global instance is not ready now,
|
// for some global instance is not ready now,
|
||||||
|
@ -390,6 +391,7 @@ void SrsServer::destroy()
|
||||||
srs_freep(webrtc_listener_);
|
srs_freep(webrtc_listener_);
|
||||||
srs_freep(stream_caster_flv_listener_);
|
srs_freep(stream_caster_flv_listener_);
|
||||||
srs_freep(stream_caster_mpegts_);
|
srs_freep(stream_caster_mpegts_);
|
||||||
|
srs_freep(exporter_listener_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsServer::dispose()
|
void SrsServer::dispose()
|
||||||
|
@ -405,6 +407,7 @@ void SrsServer::dispose()
|
||||||
webrtc_listener_->close();
|
webrtc_listener_->close();
|
||||||
stream_caster_flv_listener_->close();
|
stream_caster_flv_listener_->close();
|
||||||
stream_caster_mpegts_->close();
|
stream_caster_mpegts_->close();
|
||||||
|
exporter_listener_->close();
|
||||||
|
|
||||||
// Fast stop to notify FFMPEG to quit, wait for a while then fast kill.
|
// Fast stop to notify FFMPEG to quit, wait for a while then fast kill.
|
||||||
ingester->dispose();
|
ingester->dispose();
|
||||||
|
@ -432,6 +435,7 @@ void SrsServer::gracefully_dispose()
|
||||||
webrtc_listener_->close();
|
webrtc_listener_->close();
|
||||||
stream_caster_flv_listener_->close();
|
stream_caster_flv_listener_->close();
|
||||||
stream_caster_mpegts_->close();
|
stream_caster_mpegts_->close();
|
||||||
|
exporter_listener_->close();
|
||||||
srs_trace("listeners closed");
|
srs_trace("listeners closed");
|
||||||
|
|
||||||
// Fast stop to notify FFMPEG to quit, wait for a while then fast kill.
|
// Fast stop to notify FFMPEG to quit, wait for a while then fast kill.
|
||||||
|
@ -590,7 +594,7 @@ srs_error_t SrsServer::listen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create HTTP server listener.
|
// Create HTTPS server listener.
|
||||||
if (_srs_config->get_https_stream_enabled()) {
|
if (_srs_config->get_https_stream_enabled()) {
|
||||||
https_listener_->set_endpoint(_srs_config->get_https_stream_listen())->set_label("HTTPS-Server");
|
https_listener_->set_endpoint(_srs_config->get_https_stream_listen())->set_label("HTTPS-Server");
|
||||||
if ((err = https_listener_->listen()) != srs_success) {
|
if ((err = https_listener_->listen()) != srs_success) {
|
||||||
|
@ -638,6 +642,14 @@ srs_error_t SrsServer::listen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create exporter server listener.
|
||||||
|
if (_srs_config->get_exporter_enabled()) {
|
||||||
|
exporter_listener_->set_endpoint(_srs_config->get_exporter_listen())->set_label("Exporter-Server");
|
||||||
|
if ((err = exporter_listener_->listen()) != srs_success) {
|
||||||
|
return srs_error_wrap(err, "exporter server listen");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((err = conn_manager->start()) != srs_success) {
|
if ((err = conn_manager->start()) != srs_success) {
|
||||||
return srs_error_wrap(err, "connection manager");
|
return srs_error_wrap(err, "connection manager");
|
||||||
}
|
}
|
||||||
|
@ -1159,6 +1171,10 @@ srs_error_t SrsServer::do_on_tcp_client(ISrsListener* listener, srs_netfd_t& stf
|
||||||
// TODO: FIXME: Should manage this connection by _srs_rtc_manager
|
// TODO: FIXME: Should manage this connection by _srs_rtc_manager
|
||||||
resource = new SrsRtcTcpConn(new SrsTcpConnection(stfd2), ip, port, this);
|
resource = new SrsRtcTcpConn(new SrsTcpConnection(stfd2), ip, port, this);
|
||||||
#endif
|
#endif
|
||||||
|
} else if (listener == exporter_listener_) {
|
||||||
|
// TODO: FIXME: Maybe should support https metrics.
|
||||||
|
bool is_https = false;
|
||||||
|
resource = new SrsHttpxConn(is_https, this, new SrsTcpConnection(stfd2), http_api_mux, ip, port);
|
||||||
} else {
|
} else {
|
||||||
srs_close_stfd(stfd2);
|
srs_close_stfd(stfd2);
|
||||||
srs_warn("Close for invalid fd=%d, ip=%s:%d", fd, ip.c_str(), port);
|
srs_warn("Close for invalid fd=%d, ip=%s:%d", fd, ip.c_str(), port);
|
||||||
|
|
|
@ -133,6 +133,9 @@ private:
|
||||||
SrsHttpFlvListener* stream_caster_flv_listener_;
|
SrsHttpFlvListener* stream_caster_flv_listener_;
|
||||||
// Stream Caster for push over MPEGTS-UDP
|
// Stream Caster for push over MPEGTS-UDP
|
||||||
SrsUdpCasterListener* stream_caster_mpegts_;
|
SrsUdpCasterListener* stream_caster_mpegts_;
|
||||||
|
// Exporter server listener, over TCP. Please note that metrics request of HTTP is served by this
|
||||||
|
// listener, and it might be reused by HTTP API.
|
||||||
|
SrsTcpListener* exporter_listener_;
|
||||||
private:
|
private:
|
||||||
// Signal manager which convert gignal to io message.
|
// Signal manager which convert gignal to io message.
|
||||||
SrsSignalManager* signal_manager;
|
SrsSignalManager* signal_manager;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue