Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/cn/rpcz.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
| rpcz_database_dir | ./rpc_data/rpcz | For storing requests/contexts collected by rpcz. | src/baidu/rpc/span.cpp |
| rpcz_keep_span_db | false | Don't remove DB of rpcz at program's exit | src/baidu/rpc/span.cpp |
| rpcz_keep_span_seconds (R) | 3600 | Keep spans for at most so many seconds | src/baidu/rpc/span.cpp |
| rpcz_save_span_min_latency_us (R) | 0 (default:0) | The minimum latency microseconds of span saved | src/baidu/rpc/span.cpp |

若启动时未加-enable_rpcz,则可在启动后访问SERVER_URL/rpcz/enable动态开启rpcz,访问SERVER_URL/rpcz/disable则关闭,这两个链接等价于访问SERVER_URL/flags/enable_rpcz?setvalue=true和SERVER_URL/flags/enable_rpcz?setvalue=false。在r31010之后,rpc在html版本中增加了一个按钮可视化地开启和关闭。

Expand Down
26 changes: 21 additions & 5 deletions src/brpc/span.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "butil/object_pool.h"
#include "butil/fast_rand.h"
#include "butil/file_util.h"
#include "butil/files/file_enumerator.h"
#include "brpc/shared_object.h"
#include "brpc/reloadable_flags.h"
#include "brpc/span.h"
Expand Down Expand Up @@ -59,6 +60,9 @@ BRPC_VALIDATE_GFLAG(rpcz_keep_span_seconds, PositiveInteger);

DEFINE_bool(rpcz_keep_span_db, false, "Don't remove DB of rpcz at program's exit");

DEFINE_int64(rpcz_save_span_min_latency_us, 0, "The minimum latency microseconds of span saved");
BRPC_VALIDATE_GFLAG(rpcz_save_span_min_latency_us, NonNegativeInteger);

struct IdGen {
bool init;
uint16_t seq;
Expand Down Expand Up @@ -378,10 +382,8 @@ class SpanDB : public SharedObject {
delete id_db;
delete time_db;
if (!FLAGS_rpcz_keep_span_db) {
std::string cmd = butil::string_printf("rm -rf %s %s",
id_db_name.c_str(),
time_db_name.c_str());
butil::ignore_result(system(cmd.c_str()));
butil::DeleteFile(butil::FilePath(id_db_name), true);
butil::DeleteFile(butil::FilePath(time_db_name), true);
}
}
};
Expand Down Expand Up @@ -506,6 +508,15 @@ inline uint64_t ToLittleEndian(const uint32_t* buf) {
}

SpanDB* SpanDB::Open() {
// Remove old rpcz directory even if crash occurs.
if (!FLAGS_rpcz_keep_span_db) {
butil::FileEnumerator dirs(butil::FilePath(FLAGS_rpcz_database_dir), false,
butil::FileEnumerator::DIRECTORIES, "[0-9]*.[0-9]*.[0-9]*");
for (auto name = dirs.Next(); !name.empty(); name = dirs.Next()) {
butil::DeleteFile(name, true);
}
}

SpanDB local;
leveldb::Status st;
char prefix[64];
Expand Down Expand Up @@ -568,6 +579,11 @@ leveldb::Status SpanDB::Index(const Span* span, std::string* value_buf) {
// of time window.

const int64_t start_time = span->GetStartRealTimeUs();
const int64_t latency_us = span->GetEndRealTimeUs() - start_time;
// if latency_us < FLAGS_rpcz_save_span_min_latency_us, don't save this span
if (latency_us < FLAGS_rpcz_save_span_min_latency_us) {
return leveldb::Status::OK();
}
BriefSpan brief;
brief.set_trace_id(span->trace_id());
brief.set_span_id(span->span_id());
Expand All @@ -577,7 +593,7 @@ leveldb::Status SpanDB::Index(const Span* span, std::string* value_buf) {
brief.set_request_size(span->request_size());
brief.set_response_size(span->response_size());
brief.set_start_real_us(start_time);
brief.set_latency_us(span->GetEndRealTimeUs() - start_time);
brief.set_latency_us(latency_us);
brief.set_full_method_name(span->full_method_name());
if (!brief.SerializeToString(value_buf)) {
return leveldb::Status::InvalidArgument(
Expand Down