From 41fd82da09b9e512ff0f862de4ec9fb6000bb38d Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 20 Jul 2020 10:28:13 +0100 Subject: [PATCH 01/50] Add access logging as requested in linkerd/linkerd2#1913 Signed-off-by: Raphael Taylor-Davies --- Cargo.lock | 49 ++++++++ Cargo.toml | 1 + linkerd/access-log/Cargo.toml | 17 +++ linkerd/access-log/src/lib.rs | 4 + linkerd/access-log/src/tower.rs | 169 ++++++++++++++++++++++++++++ linkerd/access-log/src/tracing.rs | 74 ++++++++++++ linkerd/app/core/Cargo.toml | 1 + linkerd/app/core/src/lib.rs | 1 + linkerd/app/inbound/src/http/mod.rs | 2 + linkerd/tracing/Cargo.toml | 2 + linkerd/tracing/src/lib.rs | 13 ++- 11 files changed, 330 insertions(+), 3 deletions(-) create mode 100644 linkerd/access-log/Cargo.toml create mode 100644 linkerd/access-log/src/lib.rs create mode 100644 linkerd/access-log/src/tower.rs create mode 100644 linkerd/access-log/src/tracing.rs diff --git a/Cargo.lock b/Cargo.lock index 5101053e20..745707fdcd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -153,6 +153,27 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "lazy_static", +] + [[package]] name = "data-encoding" version = "2.3.1" @@ -592,6 +613,20 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project 0.4.27", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-addr" version = "0.1.0" @@ -634,6 +669,7 @@ dependencies = [ "indexmap", "ipnet", "libc", + "linkerd-access-log", "linkerd-addr", "linkerd-buffer", "linkerd-cache", @@ -1414,11 +1450,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -2346,6 +2384,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.11" diff --git a/Cargo.toml b/Cargo.toml index 1ba52c28cf..1c13a343a3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "hyper-balance", + "linkerd/access-log", "linkerd/addr", "linkerd/app/core", "linkerd/app/gateway", diff --git a/linkerd/access-log/Cargo.toml b/linkerd/access-log/Cargo.toml new file mode 100644 index 0000000000..5113737bc8 --- /dev/null +++ b/linkerd/access-log/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "linkerd-access-log" +version = "0.1.0" +authors = ["Linkerd Developers "] +license = "Apache-2.0" +edition = "2018" +publish = false + +[dependencies] +base64 = "0.13" +chrono = "0.4.15" +futures = "0.3" +http = "0.2" +tower = { version = "0.4", default-features = false } +tracing = "0.1.19" +tracing-subscriber = "0.2.12" +pin-project = "0.4" \ No newline at end of file diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs new file mode 100644 index 0000000000..4ed257aa64 --- /dev/null +++ b/linkerd/access-log/src/lib.rs @@ -0,0 +1,4 @@ +#![deny(warnings, rust_2018_idioms)] + +pub mod tower; +pub mod tracing; diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs new file mode 100644 index 0000000000..78486157e1 --- /dev/null +++ b/linkerd/access-log/src/tower.rs @@ -0,0 +1,169 @@ +use futures::TryFuture; +use pin_project::pin_project; +use std::future::Future; +use std::pin::Pin; +use std::task::{Context, Poll}; +use std::time::{Duration, Instant}; +use tracing::{field, span, Level, Span}; + +/// A tower layer that associates a tokio-tracing Span with each request +#[derive(Clone)] +pub struct AccessLogLayer {} + +#[derive(Clone)] +pub struct AccessLogContext { + inner: Svc, +} + +struct ResponseFutureInner { + span: Span, + start: Instant, + processing: Duration, +} + +#[pin_project] +pub struct AccessLogFuture { + data: Option, + + #[pin] + inner: F, +} + +impl tower::layer::Layer for AccessLogLayer { + type Service = AccessLogContext; + + fn layer(&self, inner: Svc) -> Self::Service { + Self::Service { inner } + } +} + +impl tower::Service> for AccessLogContext +where + Svc: tower::Service, Response = http::Response>, +{ + type Response = Svc::Response; + type Error = Svc::Error; + type Future = AccessLogFuture; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.inner.poll_ready(cx) + } + + fn call(&mut self, request: http::Request) -> Self::Future { + let span: Span = span!(target: "access_log", Level::TRACE, "http", + timestamp=field::Empty, processing_ns=field::Empty, total_ns=field::Empty, + method=field::Empty, uri=field::Empty, version=field::Empty, user_agent=field::Empty, + host=field::Empty, trace_id=field::Empty, status=field::Empty, + request_bytes=field::Empty, response_bytes=field::Empty); + + if span.is_disabled() { + return AccessLogFuture { + data: None, + inner: self.inner.call(request), + }; + } + + // Delay formatting to avoid an intermediate `String` + let delayed_format = chrono::Utc::now().format_with_items( + [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), + ); + + span.record("timestamp", &field::display(&delayed_format)); + span.record("method", &request.method().as_str()); + span.record("uri", &field::display(&request.uri())); + span.record("version", &field::debug(&request.version())); + + request + .headers() + .get("Host") + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("host", &x)); + + request + .headers() + .get("User-Agent") + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("user_agent", &x)); + + request + .headers() + .get("Content-Length") + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("request_bytes", &x)); + + request + .headers() + .get("x-b3-traceid") + .or_else(|| request.headers().get("X-Request-ID")) + .or_else(|| request.headers().get("X-Amzn-Trace-Id")) + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("trace_id", &x)); + + AccessLogFuture { + data: Some(ResponseFutureInner { + span, + start: Instant::now(), + processing: Duration::from_secs(0), + }), + inner: self.inner.call(request), + } + } +} + +impl AccessLogLayer { + pub fn new() -> Self { + Self {} + } +} + +impl Default for AccessLogLayer { + fn default() -> Self { + Self::new() + } +} + +impl Future for AccessLogFuture +where + F: TryFuture>, +{ + type Output = Result; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let mut this = self.project(); + + let data: &mut ResponseFutureInner = match &mut this.data { + Some(data) => data, + None => return this.inner.try_poll(cx), + }; + + let _enter = data.span.enter(); + let poll_start = Instant::now(); + + let response: http::Response = match this.inner.try_poll(cx) { + Poll::Pending => { + data.processing += Instant::now().duration_since(poll_start); + return Poll::Pending; + } + Poll::Ready(Err(e)) => return Poll::Ready(Err(e)), + Poll::Ready(Ok(response)) => response, + }; + + let now = Instant::now(); + let total_ns = now.duration_since(data.start).as_nanos(); + let processing_ns = (now.duration_since(poll_start) + data.processing).as_nanos(); + + let span = &data.span; + + response + .headers() + .get("Content-Length") + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("response_bytes", &x)); + + span.record("status", &response.status().as_u16()); + span.record("total_ns", &field::display(total_ns)); + span.record("processing_ns", &field::display(processing_ns)); + + Poll::Ready(Ok(response)) + } +} diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs new file mode 100644 index 0000000000..39cdbec343 --- /dev/null +++ b/linkerd/access-log/src/tracing.rs @@ -0,0 +1,74 @@ +use std::io::{self, Write}; +use std::marker::PhantomData; +use tracing::{Id, Metadata, Subscriber}; +use tracing_subscriber::{ + fmt::{ + format::{DefaultFields, JsonFields}, + FormatFields, FormattedFields, MakeWriter, + }, + layer::Context, + registry::LookupSpan, + Layer, +}; + +pub struct AccessLogWriter { + make_writer: W, + _f: PhantomData, +} + +impl AccessLogWriter io::Stdout, DefaultFields> { + pub fn new() -> Self { + Self { + make_writer: io::stdout, + _f: PhantomData::default(), + } + } +} + +impl Default for AccessLogWriter io::Stdout, DefaultFields> { + fn default() -> Self { + Self::new() + } +} + +impl AccessLogWriter { + #[inline(always)] + fn cares_about(&self, meta: &'static Metadata<'static>) -> bool { + meta.target() == "access_log" + } + + pub fn json(self) -> AccessLogWriter { + AccessLogWriter { + make_writer: self.make_writer, + _f: PhantomData::default(), + } + } + + pub fn with_writer(self, make_writer: W2) -> AccessLogWriter + where + W2: MakeWriter + 'static, + { + AccessLogWriter { + make_writer, + _f: Default::default(), + } + } +} + +impl Layer for AccessLogWriter +where + W: MakeWriter + 'static, + S: Subscriber + for<'span> LookupSpan<'span>, + F: for<'writer> FormatFields<'writer> + 'static, +{ + fn on_close(&self, id: Id, ctx: Context<'_, S>) { + if let Some(span) = ctx.span(&id) { + if self.cares_about(span.metadata()) { + if let Some(fields) = span.extensions().get::>() { + let mut writer = self.make_writer.make_writer(); + let _ = writeln!(&mut writer, "{}", fields.fields); + } + } + } + } +} diff --git a/linkerd/app/core/Cargo.toml b/linkerd/app/core/Cargo.toml index 18b93f7518..85fb84268c 100644 --- a/linkerd/app/core/Cargo.toml +++ b/linkerd/app/core/Cargo.toml @@ -23,6 +23,7 @@ hyper = { version = "0.14.2", features = ["http1", "http2"] } futures = "0.3.9" indexmap = "1.0" ipnet = "2.0" +linkerd-access-log = { path = "../../access-log" } linkerd-addr = { path = "../../addr" } linkerd-cache = { path = "../../cache" } linkerd-buffer = { path = "../../buffer" } diff --git a/linkerd/app/core/src/lib.rs b/linkerd/app/core/src/lib.rs index 3cd58a756f..4034cc8fc6 100644 --- a/linkerd/app/core/src/lib.rs +++ b/linkerd/app/core/src/lib.rs @@ -9,6 +9,7 @@ #![deny(warnings, rust_2018_idioms)] +pub use linkerd_access_log as access_log; pub use linkerd_addr::{self as addr, Addr, NameAddr}; pub use linkerd_cache as cache; pub use linkerd_conditional::Conditional; diff --git a/linkerd/app/inbound/src/http/mod.rs b/linkerd/app/inbound/src/http/mod.rs index 6c325680bb..5596252e73 100644 --- a/linkerd/app/inbound/src/http/mod.rs +++ b/linkerd/app/inbound/src/http/mod.rs @@ -5,6 +5,7 @@ use crate::{ }; pub use linkerd_app_core::proxy::http::{strip_header, BoxBody, DetectHttp, Request, Response}; use linkerd_app_core::{ + access_log::tower::AccessLogLayer, classify, config::{ProxyConfig, ServerConfig}, drain, dst, errors, io, metrics, @@ -72,6 +73,7 @@ where .push(metrics.http_errors.clone()) // Synthesizes responses for proxy errors. .push(errors::layer()) + .push(AccessLogLayer::new()) .push(TraceContext::layer( span_sink.map(|k| SpanConverter::server(k, trace_labels())), )) diff --git a/linkerd/tracing/Cargo.toml b/linkerd/tracing/Cargo.toml index bd73eef0c3..b4013dcd82 100644 --- a/linkerd/tracing/Cargo.toml +++ b/linkerd/tracing/Cargo.toml @@ -11,11 +11,13 @@ bytes = "1" html-escape = "0.2.5" http = "0.2" hyper = { version = "0.14.2", features = ["http1"] } +linkerd-access-log = { path = "../access-log" } linkerd-error = { path = "../error" } serde_json = "1" tokio = { version = "1", features = ["time"] } tokio-trace = { git = "https://github.com/hawkw/tokio-trace", rev = "7d5998e7cb3beb06ada5983675319dc4853576c5", features = ["serde"] } tracing = "0.1.22" +tracing-appender = "0.1.1" tracing-log = "0.1" [dependencies.tracing-subscriber] diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 5d596801e6..9d61fcdff7 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -6,10 +6,12 @@ mod uptime; use self::uptime::Uptime; use hyper::body::HttpBody; +use linkerd_access_log::tracing::AccessLogWriter; use linkerd_error::Error; -use std::{env, str}; +use std::{env, str, sync::Arc}; use tokio_trace::tasks::TasksLayer; use tracing::Dispatch; +use tracing_appender::non_blocking::WorkerGuard; use tracing_subscriber::{fmt::format, prelude::*}; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; @@ -96,6 +98,9 @@ impl Settings { let level = level::Handle::new(level); let registry = tracing_subscriber::registry().with(filter); + let (non_blocking, guard) = tracing_appender::non_blocking(std::io::stdout()); + let access_log = AccessLogWriter::new().with_writer(non_blocking); + let (dispatch, tasks) = match format.to_uppercase().as_ref() { "JSON" => { let (tasks, tasks_layer) = TasksLayer::::new(); @@ -113,7 +118,7 @@ impl Settings { // Since we're using the JSON event formatter, we must also // use the JSON field formatter. .fmt_fields(format::JsonFields::default()); - let registry = registry.with(tasks_layer); + let registry = registry.with(tasks_layer).with(access_log); let dispatch = if self.test { registry.with(fmt.with_test_writer()).into() } else { @@ -123,7 +128,7 @@ impl Settings { } _ => { let (tasks, tasks_layer) = TasksLayer::::new(); - let registry = registry.with(tasks_layer); + let registry = registry.with(tasks_layer).with(access_log); let fmt = tracing_subscriber::fmt::layer().event_format(fmt); let dispatch = if self.test { registry.with(fmt.with_test_writer()).into() @@ -139,6 +144,7 @@ impl Settings { Handle(Inner::Enabled { level, tasks: tasks::Handle { tasks }, + flush_guard: Arc::new(guard), }), ) } @@ -153,6 +159,7 @@ enum Inner { Enabled { level: level::Handle, tasks: tasks::Handle, + flush_guard: Arc, }, } From acbe77ec0113f92ec78b47e8bd0576afd972bbe7 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Fri, 14 May 2021 18:09:34 +0000 Subject: [PATCH 02/50] fixup pin-project dependency --- Cargo.lock | 90 ++++++++++++++--------------------- linkerd/access-log/Cargo.toml | 2 +- 2 files changed, 36 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2959d811a7..cacd021150 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -507,7 +507,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.5", + "pin-project", "socket2", "tokio", "tower-service", @@ -522,7 +522,7 @@ dependencies = [ "futures", "http", "hyper", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-test", "tower", @@ -645,7 +645,7 @@ dependencies = [ "chrono", "futures", "http", - "pin-project 0.4.28", + "pin-project", "tower", "tracing", "tracing-subscriber", @@ -736,7 +736,7 @@ dependencies = [ "linkerd-tracing", "linkerd-transport-header", "linkerd2-proxy-api", - "pin-project 1.0.5", + "pin-project", "procinfo", "prost-types", "regex", @@ -835,7 +835,7 @@ dependencies = [ "linkerd-io", "linkerd-retry", "linkerd-tracing", - "pin-project 1.0.5", + "pin-project", "thiserror", "tokio", "tokio-test", @@ -885,7 +885,7 @@ version = "0.1.0" dependencies = [ "futures", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-util", "tower", @@ -918,7 +918,7 @@ dependencies = [ "futures", "linkerd-dns-name", "linkerd-error", - "pin-project 1.0.5", + "pin-project", "thiserror", "tokio", "tracing", @@ -940,7 +940,7 @@ version = "0.1.0" dependencies = [ "futures", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-test", "tower", @@ -953,7 +953,7 @@ dependencies = [ "bytes", "futures", "linkerd-io", - "pin-project 1.0.5", + "pin-project", "tokio", "tracing", ] @@ -976,7 +976,7 @@ dependencies = [ "futures", "indexmap", "linkerd-metrics", - "pin-project 1.0.5", + "pin-project", "tower", ] @@ -986,7 +986,7 @@ version = "0.1.0" dependencies = [ "futures", "linkerd-error", - "pin-project 1.0.5", + "pin-project", "tower", ] @@ -995,7 +995,7 @@ name = "linkerd-exp-backoff" version = "0.1.0" dependencies = [ "futures", - "pin-project 1.0.5", + "pin-project", "quickcheck", "rand", "thiserror", @@ -1012,7 +1012,7 @@ dependencies = [ "http-body", "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tower", ] @@ -1040,7 +1040,7 @@ dependencies = [ "linkerd-http-classify", "linkerd-metrics", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tower", "tracing", ] @@ -1066,7 +1066,7 @@ dependencies = [ "bytes", "futures", "linkerd-errno", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-rustls", "tokio-test", @@ -1120,7 +1120,7 @@ dependencies = [ "linkerd-stack", "linkerd-tls", "linkerd2-proxy-api", - "pin-project 1.0.5", + "pin-project", "prost", "tonic", "tower", @@ -1133,7 +1133,7 @@ version = "0.1.0" dependencies = [ "futures", "linkerd-error", - "pin-project 1.0.5", + "pin-project", "tower", ] @@ -1146,7 +1146,7 @@ dependencies = [ "linkerd-error", "linkerd-proxy-core", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-util", "tower", @@ -1193,7 +1193,7 @@ dependencies = [ "linkerd-stack", "linkerd-timeout", "linkerd-tracing", - "pin-project 1.0.5", + "pin-project", "rand", "thiserror", "tokio", @@ -1215,7 +1215,7 @@ dependencies = [ "linkerd-stack", "linkerd-tls", "linkerd2-proxy-api", - "pin-project 1.0.5", + "pin-project", "tokio", "tonic", "tracing", @@ -1228,7 +1228,7 @@ dependencies = [ "futures", "linkerd-error", "linkerd-proxy-core", - "pin-project 1.0.5", + "pin-project", "thiserror", "tower", "tracing", @@ -1252,7 +1252,7 @@ dependencies = [ "linkerd-stack", "linkerd-tls", "linkerd2-proxy-api", - "pin-project 1.0.5", + "pin-project", "prost-types", "rand", "thiserror", @@ -1270,7 +1270,7 @@ dependencies = [ "linkerd-duplex", "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "rand", "tokio", "tower", @@ -1288,7 +1288,7 @@ dependencies = [ "linkerd-io", "linkerd-metrics", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "socket2", "tokio", "tokio-stream", @@ -1303,7 +1303,7 @@ dependencies = [ "futures", "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tower", "tracing", ] @@ -1314,7 +1314,7 @@ version = "0.1.0" dependencies = [ "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tower", "tracing", ] @@ -1335,7 +1335,7 @@ dependencies = [ "linkerd-proxy-api-resolve", "linkerd-stack", "linkerd2-proxy-api", - "pin-project 1.0.5", + "pin-project", "prost-types", "quickcheck", "rand", @@ -1363,7 +1363,7 @@ dependencies = [ "futures", "linkerd-error", "linkerd-tracing", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-test", "tower", @@ -1388,7 +1388,7 @@ dependencies = [ "futures", "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "tower", "tracing", ] @@ -1400,7 +1400,7 @@ dependencies = [ "futures", "linkerd-error", "linkerd-stack", - "pin-project 1.0.5", + "pin-project", "thiserror", "tokio", "tokio-test", @@ -1722,33 +1722,13 @@ dependencies = [ "indexmap", ] -[[package]] -name = "pin-project" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f" -dependencies = [ - "pin-project-internal 0.4.28", -] - [[package]] name = "pin-project" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63" dependencies = [ - "pin-project-internal 1.0.5", -] - -[[package]] -name = "pin-project-internal" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "pin-project-internal", ] [[package]] @@ -2310,7 +2290,7 @@ dependencies = [ "http", "http-body", "percent-encoding", - "pin-project 1.0.5", + "pin-project", "prost", "prost-derive", "tokio-stream", @@ -2340,7 +2320,7 @@ dependencies = [ "futures-core", "futures-util", "indexmap", - "pin-project 1.0.5", + "pin-project", "rand", "slab", "tokio", @@ -2370,7 +2350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4546773ffeab9e4ea02b8872faa49bb616a80a7da66afc2f32688943f97efa7" dependencies = [ "futures-util", - "pin-project 1.0.5", + "pin-project", "tokio", "tokio-test", "tower-layer", @@ -2427,7 +2407,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.0.5", + "pin-project", "tracing", ] diff --git a/linkerd/access-log/Cargo.toml b/linkerd/access-log/Cargo.toml index 5113737bc8..7e4afb0ae4 100644 --- a/linkerd/access-log/Cargo.toml +++ b/linkerd/access-log/Cargo.toml @@ -11,7 +11,7 @@ base64 = "0.13" chrono = "0.4.15" futures = "0.3" http = "0.2" +pin-project = "1" tower = { version = "0.4", default-features = false } tracing = "0.1.19" tracing-subscriber = "0.2.12" -pin-project = "0.4" \ No newline at end of file From 11d2076f6059f27efa104aaea003ba54549f4506 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Fri, 14 May 2021 18:21:28 +0000 Subject: [PATCH 03/50] fixup fuzzer cargo lock files --- linkerd/addr/fuzz/Cargo.lock | 122 +++++++++++++++++++++++ linkerd/app/inbound/fuzz/Cargo.lock | 92 +++++++++++++++++ linkerd/dns/fuzz/Cargo.lock | 115 +++++++++++++++++++++ linkerd/proxy/http/fuzz/Cargo.lock | 101 +++++++++++++++++++ linkerd/tls/fuzz/Cargo.lock | 98 ++++++++++++++++++ linkerd/transport-header/fuzz/Cargo.lock | 96 +++++++++++++++++- 6 files changed, 622 insertions(+), 2 deletions(-) diff --git a/linkerd/addr/fuzz/Cargo.lock b/linkerd/addr/fuzz/Cargo.lock index bb47a9f077..f834562f05 100644 --- a/linkerd/addr/fuzz/Cargo.lock +++ b/linkerd/addr/fuzz/Cargo.lock @@ -23,6 +23,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.2.1" @@ -59,6 +65,40 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "fnv" version = "1.0.7" @@ -279,6 +319,20 @@ dependencies = [ "cc", ] +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-addr" version = "0.1.0" @@ -322,11 +376,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -364,6 +420,25 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -612,6 +687,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + [[package]] name = "tokio" version = "1.5.0" @@ -635,6 +721,24 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tower" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" +dependencies = [ + "futures-core", + "pin-project", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" + [[package]] name = "tower-service" version = "0.3.1" @@ -653,6 +757,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -701,6 +816,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", @@ -750,6 +866,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + [[package]] name = "wasm-bindgen" version = "0.2.73" diff --git a/linkerd/app/inbound/fuzz/Cargo.lock b/linkerd/app/inbound/fuzz/Cargo.lock index e3e4885b78..f19dbb96f7 100644 --- a/linkerd/app/inbound/fuzz/Cargo.lock +++ b/linkerd/app/inbound/fuzz/Cargo.lock @@ -121,6 +121,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + [[package]] name = "crc32fast" version = "1.2.1" @@ -130,6 +143,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -555,6 +589,20 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-addr" version = "0.1.0" @@ -576,6 +624,7 @@ dependencies = [ "indexmap", "ipnet", "libc", + "linkerd-access-log", "linkerd-addr", "linkerd-cache", "linkerd-concurrency-limit", @@ -1251,11 +1300,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -1389,6 +1440,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -1891,6 +1961,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "tinyvec" version = "1.2.0" @@ -2081,6 +2161,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -2129,6 +2220,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/dns/fuzz/Cargo.lock b/linkerd/dns/fuzz/Cargo.lock index 57350c2bb9..9bb4085413 100644 --- a/linkerd/dns/fuzz/Cargo.lock +++ b/linkerd/dns/fuzz/Cargo.lock @@ -34,6 +34,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.2.1" @@ -70,6 +76,40 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -382,6 +422,20 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-dns" version = "0.1.0" @@ -431,11 +485,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -525,6 +581,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -852,6 +927,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "tinyvec" version = "1.2.0" @@ -895,6 +980,24 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tower" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" +dependencies = [ + "futures-core", + "pin-project", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" + [[package]] name = "tower-service" version = "0.3.1" @@ -913,6 +1016,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -961,6 +1075,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/proxy/http/fuzz/Cargo.lock b/linkerd/proxy/http/fuzz/Cargo.lock index 86e1853302..e7d2c83ce3 100644 --- a/linkerd/proxy/http/fuzz/Cargo.lock +++ b/linkerd/proxy/http/fuzz/Cargo.lock @@ -8,6 +8,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "arbitrary" version = "1.0.0" @@ -94,6 +103,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + [[package]] name = "crc32fast" version = "1.2.1" @@ -103,6 +125,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "deflate" version = "0.7.20" @@ -407,6 +450,20 @@ dependencies = [ "cc", ] +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-detect" version = "0.1.0" @@ -590,11 +647,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -663,6 +722,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -1010,6 +1088,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "tokio" version = "1.5.0" @@ -1147,6 +1235,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -1194,6 +1293,8 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ + "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/tls/fuzz/Cargo.lock b/linkerd/tls/fuzz/Cargo.lock index 4e255d1d08..cf2def8120 100644 --- a/linkerd/tls/fuzz/Cargo.lock +++ b/linkerd/tls/fuzz/Cargo.lock @@ -76,6 +76,40 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "dyn-clone" version = "1.0.4" @@ -300,6 +334,20 @@ dependencies = [ "cc", ] +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-conditional" version = "0.1.0" @@ -404,11 +452,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -477,6 +527,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -748,6 +817,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + [[package]] name = "tokio" version = "1.5.0" @@ -851,6 +931,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -899,6 +990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", @@ -948,6 +1040,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + [[package]] name = "wasm-bindgen" version = "0.2.73" diff --git a/linkerd/transport-header/fuzz/Cargo.lock b/linkerd/transport-header/fuzz/Cargo.lock index 7619c79293..a52466b29b 100644 --- a/linkerd/transport-header/fuzz/Cargo.lock +++ b/linkerd/transport-header/fuzz/Cargo.lock @@ -85,6 +85,40 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +dependencies = [ + "autocfg", + "cfg-if", + "lazy_static", +] + [[package]] name = "derive_arbitrary" version = "1.0.0" @@ -377,6 +411,20 @@ dependencies = [ "cc", ] +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "pin-project", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-dns-name" version = "0.1.0" @@ -432,11 +480,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -542,6 +592,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -952,6 +1021,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + [[package]] name = "tokio" version = "1.5.0" @@ -1060,6 +1140,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -1108,6 +1199,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", @@ -1165,9 +1257,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" From cd80bf4785935a823beda4b69bf1f27d11882083 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 17 May 2021 20:27:17 +0100 Subject: [PATCH 04/50] review feedback Signed-off-by: Raphael Taylor-Davies --- linkerd/access-log/src/tower.rs | 91 +++++++++++++++---------------- linkerd/access-log/src/tracing.rs | 14 ++++- 2 files changed, 56 insertions(+), 49 deletions(-) diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index 78486157e1..39aca46d42 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -6,7 +6,7 @@ use std::task::{Context, Poll}; use std::time::{Duration, Instant}; use tracing::{field, span, Level, Span}; -/// A tower layer that associates a tokio-tracing Span with each request +/// A tower layer that associates a `tracing` `Span` with each request #[derive(Clone)] pub struct AccessLogLayer {} @@ -37,24 +37,55 @@ impl tower::layer::Layer for AccessLogLayer { } } -impl tower::Service> for AccessLogContext +impl tower::Service> for AccessLogContext where - Svc: tower::Service, Response = http::Response>, + S: tower::Service, Response = http::Response>, { - type Response = Svc::Response; - type Error = Svc::Error; - type Future = AccessLogFuture; + type Response = S::Response; + type Error = S::Error; + type Future = AccessLogFuture; - fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { self.inner.poll_ready(cx) } fn call(&mut self, request: http::Request) -> Self::Future { - let span: Span = span!(target: "access_log", Level::TRACE, "http", - timestamp=field::Empty, processing_ns=field::Empty, total_ns=field::Empty, - method=field::Empty, uri=field::Empty, version=field::Empty, user_agent=field::Empty, - host=field::Empty, trace_id=field::Empty, status=field::Empty, - request_bytes=field::Empty, response_bytes=field::Empty); + let get_header = |name: &str| { + request + .headers() + .get(name) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default() + }; + + let trace_id = || { + request + .headers() + .get("x-b3-traceid") + .or_else(|| request.headers().get("X-Request-ID")) + .or_else(|| request.headers().get("X-Amzn-Trace-Id")) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default() + }; + + let timestamp = chrono::Utc::now().format_with_items( + [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), + ); + + let span = span!(target: "access_log", Level::TRACE, "http", + %timestamp, + processing_ns=field::Empty, + total_ns=field::Empty, + method=&request.method().as_str(), + uri=&field::display(&request.uri()), + version=&field::debug(&request.version()), + user_agent=get_header("User-Agent"), + host=get_header("Host"), + trace_id=trace_id(), + status=field::Empty, + request_bytes=get_header("Content-Length"), + response_bytes=field::Empty + ); if span.is_disabled() { return AccessLogFuture { @@ -63,42 +94,6 @@ where }; } - // Delay formatting to avoid an intermediate `String` - let delayed_format = chrono::Utc::now().format_with_items( - [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), - ); - - span.record("timestamp", &field::display(&delayed_format)); - span.record("method", &request.method().as_str()); - span.record("uri", &field::display(&request.uri())); - span.record("version", &field::debug(&request.version())); - - request - .headers() - .get("Host") - .and_then(|x| x.to_str().ok()) - .map(|x| span.record("host", &x)); - - request - .headers() - .get("User-Agent") - .and_then(|x| x.to_str().ok()) - .map(|x| span.record("user_agent", &x)); - - request - .headers() - .get("Content-Length") - .and_then(|x| x.to_str().ok()) - .map(|x| span.record("request_bytes", &x)); - - request - .headers() - .get("x-b3-traceid") - .or_else(|| request.headers().get("X-Request-ID")) - .or_else(|| request.headers().get("X-Amzn-Trace-Id")) - .and_then(|x| x.to_str().ok()) - .map(|x| span.record("trace_id", &x)); - AccessLogFuture { data: Some(ResponseFutureInner { span, diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs index 39cdbec343..578a38c59e 100644 --- a/linkerd/access-log/src/tracing.rs +++ b/linkerd/access-log/src/tracing.rs @@ -1,5 +1,6 @@ use std::io::{self, Write}; use std::marker::PhantomData; +use tracing::subscriber::Interest; use tracing::{Id, Metadata, Subscriber}; use tracing_subscriber::{ fmt::{ @@ -33,7 +34,7 @@ impl Default for AccessLogWriter io::Stdout, DefaultFields> { impl AccessLogWriter { #[inline(always)] - fn cares_about(&self, meta: &'static Metadata<'static>) -> bool { + fn cares_about(&self, meta: &Metadata<'_>) -> bool { meta.target() == "access_log" } @@ -61,6 +62,17 @@ where S: Subscriber + for<'span> LookupSpan<'span>, F: for<'writer> FormatFields<'writer> + 'static, { + fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest { + if self.cares_about(metadata) { + return Interest::always(); + } + Interest::never() + } + + fn enabled(&self, metadata: &Metadata<'_>, _: Context<'_, S>) -> bool { + self.cares_about(metadata) + } + fn on_close(&self, id: Id, ctx: Context<'_, S>) { if let Some(span) = ctx.span(&id) { if self.cares_about(span.metadata()) { From d4c5337014cd926d38ae58279a96711eb47ed4a5 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Mon, 17 May 2021 09:41:39 -0700 Subject: [PATCH 05/50] misc style cleanup Signed-off-by: Eliza Weisman --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index cacd021150..2258eb7dcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,8 +645,8 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] From e9c5892eb87a9003326383d10438f7a3ab673612 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Tue, 18 May 2021 14:44:35 -0700 Subject: [PATCH 06/50] enable/disable with env var Signed-off-by: Eliza Weisman --- Cargo.lock | 2 +- linkerd/access-log/src/tower.rs | 7 ++-- linkerd/access-log/src/tracing.rs | 1 + linkerd/tracing/src/lib.rs | 62 +++++++++++++++++++++++++++---- linkerd/tracing/src/test.rs | 19 ++++------ 5 files changed, 67 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2258eb7dcb..cacd021150 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,8 +645,8 @@ dependencies = [ "chrono", "futures", "http", - "linkerd-stack", "pin-project", + "tower", "tracing", "tracing-subscriber", ] diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index 39aca46d42..9f6adce2c2 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -11,10 +11,9 @@ use tracing::{field, span, Level, Span}; pub struct AccessLogLayer {} #[derive(Clone)] -pub struct AccessLogContext { - inner: Svc, +pub struct AccessLogContext { + inner: S, } - struct ResponseFutureInner { span: Span, start: Instant, @@ -76,7 +75,7 @@ where %timestamp, processing_ns=field::Empty, total_ns=field::Empty, - method=&request.method().as_str(), + method=request.method().as_str(), uri=&field::display(&request.uri()), version=&field::debug(&request.version()), user_agent=get_header("User-Agent"), diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs index 578a38c59e..daa917d901 100644 --- a/linkerd/access-log/src/tracing.rs +++ b/linkerd/access-log/src/tracing.rs @@ -79,6 +79,7 @@ where if let Some(fields) = span.extensions().get::>() { let mut writer = self.make_writer.make_writer(); let _ = writeln!(&mut writer, "{}", fields.fields); + println!("access log: {}", fields.fields); } } } diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 03426ec5e7..e61ee3d7b4 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -10,7 +10,7 @@ use self::uptime::Uptime; use hyper::body::HttpBody; use linkerd_access_log::tracing::AccessLogWriter; use linkerd_error::Error; -use std::{env, str, sync::Arc}; +use std::{env, fs, path::PathBuf, str, sync::Arc}; use tokio_trace::tasks::TasksLayer; use tracing::Dispatch; use tracing_appender::non_blocking::WorkerGuard; @@ -18,6 +18,7 @@ use tracing_subscriber::{fmt::format, prelude::*}; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; +const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; const DEFAULT_LOG_LEVEL: &str = "warn,linkerd=info"; const DEFAULT_LOG_FORMAT: &str = "PLAIN"; @@ -63,18 +64,33 @@ pub fn init_log_compat() -> Result<(), Error> { pub struct Settings { filter: Option, format: Option, + access_log: Option, test: bool, } impl Settings { pub fn from_env() -> Self { + use std::str::FromStr; + let mut settings = Settings::default(); if let Ok(filter) = env::var(ENV_LOG_LEVEL) { settings = settings.filter(filter); } + if let Ok(format) = env::var(ENV_LOG_FORMAT) { settings = settings.format(format); } + + if let Ok(access_log) = env::var(ENV_ACCESS_LOG) { + match PathBuf::from_str(&access_log) { + Ok(access_log) => settings = settings.access_log(access_log), + Err(e) => eprintln!( + "{} ({:?}) was not a path: {}", + ENV_ACCESS_LOG, access_log, e + ), + } + } + settings } @@ -92,6 +108,13 @@ impl Settings { } } + pub fn access_log(self, access_log: impl Into) -> Self { + Self { + access_log: Some(access_log.into()), + ..self + } + } + pub fn test(self, test: bool) -> Self { Self { test, ..self } } @@ -109,10 +132,33 @@ impl Settings { let filter = tracing_subscriber::EnvFilter::new(filter); let (filter, level) = tracing_subscriber::reload::Layer::new(filter); let level = level::Handle::new(level); - let registry = tracing_subscriber::registry().with(filter); - let (non_blocking, guard) = tracing_appender::non_blocking(std::io::stdout()); - let access_log = AccessLogWriter::new().with_writer(non_blocking); + let (access_log, flush_guard) = if let Some((access_log, flush_guard)) = + self.access_log.and_then(|path| { + let file = fs::OpenOptions::new() + .append(true) + .create(true) + .open(&path) + .map_err(|e| { + eprintln!( + "failed to create access log: {} ({}={})", + e, + ENV_ACCESS_LOG, + path.display() + ) + }) + .ok()?; + eprintln!("writing access log to {:?}", file); + let (non_blocking, guard) = tracing_appender::non_blocking(file); + let access_log = AccessLogWriter::new().with_writer(non_blocking); + Some((access_log, guard)) + }) { + (Some(access_log), Some(flush_guard)) + } else { + (None, None) + }; + + let registry = tracing_subscriber::registry().with(filter).with(access_log); let (dispatch, tasks) = match format.to_uppercase().as_ref() { "JSON" => { @@ -131,7 +177,7 @@ impl Settings { // Since we're using the JSON event formatter, we must also // use the JSON field formatter. .fmt_fields(format::JsonFields::default()); - let registry = registry.with(tasks_layer).with(access_log); + let registry = registry.with(tasks_layer); let dispatch = if self.test { registry.with(fmt.with_test_writer()).into() } else { @@ -141,7 +187,7 @@ impl Settings { } _ => { let (tasks, tasks_layer) = TasksLayer::::new(); - let registry = registry.with(tasks_layer).with(access_log); + let registry = registry.with(tasks_layer); let fmt = tracing_subscriber::fmt::layer().event_format(fmt); let dispatch = if self.test { registry.with(fmt.with_test_writer()).into() @@ -157,7 +203,7 @@ impl Settings { Handle(Inner::Enabled { level, tasks: tasks::Handle { tasks }, - flush_guard: Arc::new(guard), + flush_guard: flush_guard.map(Arc::new), }), ) } @@ -172,7 +218,7 @@ enum Inner { Enabled { level: level::Handle, tasks: tasks::Handle, - flush_guard: Arc, + flush_guard: Option>, }, } diff --git a/linkerd/tracing/src/test.rs b/linkerd/tracing/src/test.rs index 9f15857ef9..2cd71822ae 100644 --- a/linkerd/tracing/src/test.rs +++ b/linkerd/tracing/src/test.rs @@ -10,23 +10,20 @@ pub fn trace_subscriber(default: impl ToString) -> (Dispatch, Handle) { let log_level = env::var("LINKERD2_PROXY_LOG") .or_else(|_| env::var("RUST_LOG")) .unwrap_or_else(|_| default.to_string()); - let log_format = env::var("LINKERD2_PROXY_LOG_FORMAT").unwrap_or_else(|_| "PLAIN".to_string()); - env::set_var("LINKERD2_PROXY_LOG_FORMAT", &log_format); + // let log_format = env::var("LINKERD2_PROXY_LOG_FORMAT").unwrap_or_else(|_| "PLAIN".to_string()); + // env::set_var("LINKERD2_PROXY_LOG_FORMAT", &log_format); // This may fail, since the global log compat layer may have been // initialized by another test. let _ = init_log_compat(); - Settings::default() - .filter(log_level) - .format(log_format) - .test(true) - .build() + Settings::from_env().filter(log_level).test(true).build() } -pub fn with_default_filter(default: impl ToString) -> tracing::dispatcher::DefaultGuard { - let (d, _) = trace_subscriber(default); - tracing::dispatcher::set_default(&d) +pub fn with_default_filter(default: impl ToString) -> (tracing::dispatcher::DefaultGuard, Handle) { + let (d, handle) = trace_subscriber(default); + let default = tracing::dispatcher::set_default(&d); + (default, handle) } -pub fn trace_init() -> tracing::dispatcher::DefaultGuard { +pub fn trace_init() -> (tracing::dispatcher::DefaultGuard, Handle) { with_default_filter(DEFAULT_LOG) } From 6b5fb7831f61459d14e49bcec1c00594737c73ef Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Tue, 18 May 2021 14:49:56 -0700 Subject: [PATCH 07/50] add client info to access log Signed-off-by: Eliza Weisman --- Cargo.lock | 4 ++- linkerd/access-log/Cargo.toml | 4 ++- linkerd/access-log/src/tower.rs | 43 +++++++++++++++++++++++++---- linkerd/app/gateway/src/lib.rs | 13 +++++++++ linkerd/app/inbound/src/http/mod.rs | 6 ++-- linkerd/app/inbound/src/target.rs | 6 ++++ 6 files changed, 67 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cacd021150..df81975b55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,8 +645,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] diff --git a/linkerd/access-log/Cargo.toml b/linkerd/access-log/Cargo.toml index 7e4afb0ae4..16bcd90c61 100644 --- a/linkerd/access-log/Cargo.toml +++ b/linkerd/access-log/Cargo.toml @@ -12,6 +12,8 @@ chrono = "0.4.15" futures = "0.3" http = "0.2" pin-project = "1" -tower = { version = "0.4", default-features = false } +linkerd-stack = { path = "../stack" } +linkerd-identity = { path = "../identity" } +linkerd-proxy-transport = { path = "../proxy/transport" } tracing = "0.1.19" tracing-subscriber = "0.2.12" diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index 9f6adce2c2..a78a06358e 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -1,9 +1,14 @@ use futures::TryFuture; +use linkerd_identity as identity; +use linkerd_proxy_transport::{ClientAddr, Remote}; +use linkerd_stack as svc; use pin_project::pin_project; use std::future::Future; +use std::net::SocketAddr; use std::pin::Pin; use std::task::{Context, Poll}; use std::time::{Duration, Instant}; +use svc::{NewService, Param}; use tracing::{field, span, Level, Span}; /// A tower layer that associates a `tracing` `Span` with each request @@ -13,7 +18,15 @@ pub struct AccessLogLayer {} #[derive(Clone)] pub struct AccessLogContext { inner: S, + client_addr: SocketAddr, + client_id: Option, } + +#[derive(Clone)] +pub struct NewAccessLog { + inner: S, +} + struct ResponseFutureInner { span: Span, start: Instant, @@ -28,17 +41,35 @@ pub struct AccessLogFuture { inner: F, } -impl tower::layer::Layer for AccessLogLayer { - type Service = AccessLogContext; +impl svc::layer::Layer for AccessLogLayer { + type Service = NewAccessLog; - fn layer(&self, inner: Svc) -> Self::Service { + fn layer(&self, inner: N) -> Self::Service { Self::Service { inner } } } -impl tower::Service> for AccessLogContext +impl NewService for NewAccessLog +where + T: Param> + Param>, + S: NewService, +{ + type Service = AccessLogContext; + fn new_service(&mut self, target: T) -> Self::Service { + let Remote(ClientAddr(client_addr)) = target.param(); + let client_id = target.param(); + let inner = self.inner.new_service(target); + AccessLogContext { + inner, + client_addr, + client_id, + } + } +} + +impl svc::Service> for AccessLogContext where - S: tower::Service, Response = http::Response>, + S: svc::Service, Response = http::Response>, { type Response = S::Response; type Error = S::Error; @@ -73,6 +104,8 @@ where let span = span!(target: "access_log", Level::TRACE, "http", %timestamp, + client.addr = %self.client_addr, + client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), processing_ns=field::Empty, total_ns=field::Empty, method=request.method().as_str(), diff --git a/linkerd/app/gateway/src/lib.rs b/linkerd/app/gateway/src/lib.rs index fc7326fc79..6cb9254efc 100644 --- a/linkerd/app/gateway/src/lib.rs +++ b/linkerd/app/gateway/src/lib.rs @@ -17,6 +17,7 @@ use linkerd_app_core::{ }, svc::{self, Param}, tls, + transport::{ClientAddr, Remote}, transport_header::SessionProtocol, Error, NameAddr, NameMatch, Never, }; @@ -288,6 +289,12 @@ impl Param for HttpTransportHeader { } } +impl Param> for HttpTransportHeader { + fn param(&self) -> Remote { + self.client.client_addr + } +} + // === impl HttpLegacy === impl> TryFrom<(Result, E>, ClientInfo)> for HttpLegacy { @@ -322,6 +329,12 @@ impl Param> for HttpLegacy { } } +impl Param> for HttpLegacy { + fn param(&self) -> Remote { + self.client.client_addr + } +} + impl Param for HttpLegacy { fn param(&self) -> http::Version { self.version diff --git a/linkerd/app/inbound/src/http/mod.rs b/linkerd/app/inbound/src/http/mod.rs index 74416c6b70..d0e474c17d 100644 --- a/linkerd/app/inbound/src/http/mod.rs +++ b/linkerd/app/inbound/src/http/mod.rs @@ -20,6 +20,7 @@ use linkerd_app_core::{ proxy::{http, tap}, reconnect, svc::{self, Param}, + transport::{ClientAddr, Remote}, Error, DST_OVERRIDE_HEADER, }; use tracing::debug_span; @@ -36,7 +37,8 @@ impl Inbound { where T: Param + Param - + Param>, + + Param> + + Param>, T: Clone + Send + 'static, I: io::AsyncRead + io::AsyncWrite + io::PeerAddr + Send + Unpin + 'static, H: svc::NewService + Clone + Send + Sync + Unpin + 'static, @@ -82,13 +84,13 @@ impl Inbound { .push(rt.metrics.http_errors.clone()) // Synthesizes responses for proxy errors. .push(errors::layer()) - .push(AccessLogLayer::new()) .push(http_tracing::server(rt.span_sink.clone(), trace_labels())) // Record when an HTTP/1 URI was in absolute form .push(http::normalize_uri::MarkAbsoluteForm::layer()) .push(http::BoxRequest::layer()) .push(http::BoxResponse::layer()), ) + .push(AccessLogLayer::new()) .check_new_service::>() .instrument(|t: &T| debug_span!("http", v=%Param::::param(t))) .push(http::NewServeHttp::layer(h2_settings, rt.drain.clone())) diff --git a/linkerd/app/inbound/src/target.rs b/linkerd/app/inbound/src/target.rs index be5a3d7301..53c40127b6 100644 --- a/linkerd/app/inbound/src/target.rs +++ b/linkerd/app/inbound/src/target.rs @@ -141,6 +141,12 @@ impl Param> for HttpAccept { } } +impl Param> for HttpAccept { + fn param(&self) -> Remote { + self.tcp.client_addr + } +} + // === impl HttpEndpoint === impl Param for HttpEndpoint { From dce15dd927d5aef1e8f667242b279954f47b6bd5 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Tue, 18 May 2021 15:06:01 -0700 Subject: [PATCH 08/50] ensure the tracing filter enables access log spans Signed-off-by: Eliza Weisman --- linkerd/tracing/src/lib.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index e61ee3d7b4..9a6599125d 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -130,11 +130,11 @@ impl Settings { .with_timer(Uptime::starting_now()) .with_thread_ids(!self.test); let filter = tracing_subscriber::EnvFilter::new(filter); - let (filter, level) = tracing_subscriber::reload::Layer::new(filter); - let level = level::Handle::new(level); - let (access_log, flush_guard) = if let Some((access_log, flush_guard)) = + let (access_log, flush_guard, filter) = if let Some((access_log, flush_guard)) = self.access_log.and_then(|path| { + // Create the access log file, or open it in append-only mode if + // it already exists. let file = fs::OpenOptions::new() .append(true) .create(true) @@ -148,16 +148,29 @@ impl Settings { ) }) .ok()?; + + // If we successfully created or opened the access log file, + // build the access log layer. eprintln!("writing access log to {:?}", file); let (non_blocking, guard) = tracing_appender::non_blocking(file); let access_log = AccessLogWriter::new().with_writer(non_blocking); + Some((access_log, guard)) }) { - (Some(access_log), Some(flush_guard)) + // Also, ensure that the `tracing` filter configuration will + // always enable the access log spans. + let filter = filter.add_directive( + "access_log=trace" + .parse() + .expect("hard-coded filter directive should always parse"), + ); + (Some(access_log), Some(flush_guard), filter) } else { - (None, None) + (None, None, filter) }; + let (filter, level) = tracing_subscriber::reload::Layer::new(filter); + let level = level::Handle::new(level); let registry = tracing_subscriber::registry().with(filter).with(access_log); let (dispatch, tasks) = match format.to_uppercase().as_ref() { From 4d766324ea32b3c739e6d6df16de732bdad77ab6 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Tue, 18 May 2021 15:10:21 -0700 Subject: [PATCH 09/50] change access log spans to `INFO` Signed-off-by: Eliza Weisman --- linkerd/access-log/src/tower.rs | 2 +- linkerd/tracing/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index a78a06358e..62216b0b9f 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -102,7 +102,7 @@ where [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), ); - let span = span!(target: "access_log", Level::TRACE, "http", + let span = span!(target: "access_log", Level::INFO, "http", %timestamp, client.addr = %self.client_addr, client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 9a6599125d..3a854b29a5 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -160,7 +160,7 @@ impl Settings { // Also, ensure that the `tracing` filter configuration will // always enable the access log spans. let filter = filter.add_directive( - "access_log=trace" + "access_log=info" .parse() .expect("hard-coded filter directive should always parse"), ); From 0990eb9e3c524d737b77a8c33f84684669d286ba Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 31 May 2021 17:25:38 +0100 Subject: [PATCH 10/50] review feedback Signed-off-by: Raphael Taylor-Davies --- linkerd/access-log/src/tower.rs | 32 +++++++++++++++---------------- linkerd/access-log/src/tracing.rs | 1 - linkerd/tracing/src/test.rs | 2 -- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index 62216b0b9f..a2b55a63ca 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -80,7 +80,7 @@ where } fn call(&mut self, request: http::Request) -> Self::Future { - let get_header = |name: &str| { + let get_header = |name: http::header::HeaderName| { request .headers() .get(name) @@ -89,11 +89,11 @@ where }; let trace_id = || { - request - .headers() + let headers = request.headers(); + headers .get("x-b3-traceid") - .or_else(|| request.headers().get("X-Request-ID")) - .or_else(|| request.headers().get("X-Amzn-Trace-Id")) + .or_else(|| headers.get("X-Request-ID")) + .or_else(|| headers.get("X-Amzn-Trace-Id")) .and_then(|x| x.to_str().ok()) .unwrap_or_default() }; @@ -106,17 +106,17 @@ where %timestamp, client.addr = %self.client_addr, client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), - processing_ns=field::Empty, - total_ns=field::Empty, - method=request.method().as_str(), - uri=&field::display(&request.uri()), - version=&field::debug(&request.version()), - user_agent=get_header("User-Agent"), - host=get_header("Host"), - trace_id=trace_id(), - status=field::Empty, - request_bytes=get_header("Content-Length"), - response_bytes=field::Empty + processing_ns = field::Empty, + total_ns = field::Empty, + method = request.method().as_str(), + uri = %request.uri(), + version = ?request.version(), + user_agent = get_header(http::header::USER_AGENT), + host = get_header(http::header::HOST), + trace_id = trace_id(), + status = field::Empty, + request_bytes = get_header(http::header::CONTENT_LENGTH), + response_bytes = field::Empty ); if span.is_disabled() { diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs index daa917d901..578a38c59e 100644 --- a/linkerd/access-log/src/tracing.rs +++ b/linkerd/access-log/src/tracing.rs @@ -79,7 +79,6 @@ where if let Some(fields) = span.extensions().get::>() { let mut writer = self.make_writer.make_writer(); let _ = writeln!(&mut writer, "{}", fields.fields); - println!("access log: {}", fields.fields); } } } diff --git a/linkerd/tracing/src/test.rs b/linkerd/tracing/src/test.rs index 2cd71822ae..a24ebd2843 100644 --- a/linkerd/tracing/src/test.rs +++ b/linkerd/tracing/src/test.rs @@ -10,8 +10,6 @@ pub fn trace_subscriber(default: impl ToString) -> (Dispatch, Handle) { let log_level = env::var("LINKERD2_PROXY_LOG") .or_else(|_| env::var("RUST_LOG")) .unwrap_or_else(|_| default.to_string()); - // let log_format = env::var("LINKERD2_PROXY_LOG_FORMAT").unwrap_or_else(|_| "PLAIN".to_string()); - // env::set_var("LINKERD2_PROXY_LOG_FORMAT", &log_format); // This may fail, since the global log compat layer may have been // initialized by another test. let _ = init_log_compat(); From c46bf15477f17ed1560bf5115b5bb5e9b531350f Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 31 May 2021 17:53:29 +0100 Subject: [PATCH 11/50] load access log setting from environment Signed-off-by: Raphael Taylor-Davies --- linkerd/tracing/src/lib.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 3a854b29a5..af70668c8f 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -1,4 +1,5 @@ #![deny(warnings, rust_2018_idioms)] +#![forbid(unsafe_code)] #![allow(clippy::inconsistent_struct_constructor)] mod level; @@ -31,11 +32,7 @@ pub fn init() -> Result { return Ok(Handle(Inner::Disabled)); } - let log_format = env::var(ENV_LOG_FORMAT).unwrap_or_else(|_| DEFAULT_LOG_FORMAT.to_string()); - let (dispatch, handle) = Settings::default() - .filter(log_level) - .format(log_format) - .build(); + let (dispatch, handle) = Settings::from_env().filter(log_level).build(); // Set the default subscriber. tracing::dispatcher::set_global_default(dispatch)?; From b5de8d816b27843cf314d226685c5a548de5aed7 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 31 May 2021 18:12:40 +0100 Subject: [PATCH 12/50] remove filtering from AccessLogWriter layer Signed-off-by: Raphael Taylor-Davies --- linkerd/access-log/src/tracing.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs index 578a38c59e..47356e7489 100644 --- a/linkerd/access-log/src/tracing.rs +++ b/linkerd/access-log/src/tracing.rs @@ -1,6 +1,5 @@ use std::io::{self, Write}; use std::marker::PhantomData; -use tracing::subscriber::Interest; use tracing::{Id, Metadata, Subscriber}; use tracing_subscriber::{ fmt::{ @@ -62,17 +61,6 @@ where S: Subscriber + for<'span> LookupSpan<'span>, F: for<'writer> FormatFields<'writer> + 'static, { - fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest { - if self.cares_about(metadata) { - return Interest::always(); - } - Interest::never() - } - - fn enabled(&self, metadata: &Metadata<'_>, _: Context<'_, S>) -> bool { - self.cares_about(metadata) - } - fn on_close(&self, id: Id, ctx: Context<'_, S>) { if let Some(span) = ctx.span(&id) { if self.cares_about(span.metadata()) { From d5fb34b5a26bae5c435ffbec888fe217f79b3467 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Mon, 31 May 2021 18:20:38 +0100 Subject: [PATCH 13/50] fix replay test compilation Signed-off-by: Raphael Taylor-Davies --- linkerd/retry/src/replay.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/linkerd/retry/src/replay.rs b/linkerd/retry/src/replay.rs index b52107a6ad..5b65f6ec5c 100644 --- a/linkerd/retry/src/replay.rs +++ b/linkerd/retry/src/replay.rs @@ -424,7 +424,7 @@ mod tests { mut tx, initial, replay, - _trace, + .. } = Test::new(); tx.send_data("hello world").await; drop(tx); @@ -442,7 +442,7 @@ mod tests { mut tx, initial, replay, - _trace, + .. } = Test::new(); tokio::spawn(async move { @@ -465,7 +465,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); let mut tlrs = HeaderMap::new(); @@ -498,7 +498,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); let mut tlrs = HeaderMap::new(); @@ -529,7 +529,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); tx.send_data("hello").await; @@ -559,7 +559,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); let mut tlrs = HeaderMap::new(); @@ -602,7 +602,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); let mut tlrs = HeaderMap::new(); @@ -648,7 +648,7 @@ mod tests { mut tx, mut initial, mut replay, - _trace, + .. } = Test::new(); let mut tlrs = HeaderMap::new(); @@ -741,6 +741,7 @@ mod tests { initial: ReplayBody, replay: ReplayBody, _trace: tracing::subscriber::DefaultGuard, + _handle: linkerd_tracing::Handle, } struct Tx(hyper::body::Sender); @@ -750,11 +751,13 @@ mod tests { let (tx, body) = hyper::Body::channel(); let initial = ReplayBody::new(body); let replay = initial.clone(); + let (trace, handle) = linkerd_tracing::test::with_default_filter("linkerd_retry=debug"); Self { tx: Tx(tx), initial, replay, - _trace: linkerd_tracing::test::with_default_filter("linkerd_retry=debug"), + _trace: trace, + _handle: handle, } } } From 93af5d950d87c0df74feecc2834cc1c332cb804d Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Wed, 2 Jun 2021 09:27:08 +0100 Subject: [PATCH 14/50] update fuzz lockfiles Signed-off-by: Raphael Taylor-Davies --- linkerd/addr/fuzz/Cargo.lock | 288 ++++++++++++++++++++++- linkerd/app/inbound/fuzz/Cargo.lock | 93 ++++++++ linkerd/dns/fuzz/Cargo.lock | 231 +++++++++++++++++- linkerd/proxy/http/fuzz/Cargo.lock | 26 +- linkerd/tls/fuzz/Cargo.lock | 129 +++++++++- linkerd/transport-header/fuzz/Cargo.lock | 126 +++++++++- 6 files changed, 888 insertions(+), 5 deletions(-) diff --git a/linkerd/addr/fuzz/Cargo.lock b/linkerd/addr/fuzz/Cargo.lock index f834562f05..f4ed36a90a 100644 --- a/linkerd/addr/fuzz/Cargo.lock +++ b/linkerd/addr/fuzz/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ansi_term" version = "0.12.1" @@ -17,6 +23,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "698b65a961a9d730fb45b6b0327e20207810c9f61ee421b082b27ba003f49e2b" +[[package]] +name = "async-trait" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "autocfg" version = "1.0.1" @@ -78,6 +95,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -99,6 +125,23 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", + "gzip-header", +] + +[[package]] +name = "dyn-clone" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" + [[package]] name = "fnv" version = "1.0.7" @@ -199,6 +242,40 @@ dependencies = [ "slab", ] +[[package]] +name = "gzip-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + [[package]] name = "hermit-abi" version = "0.1.18" @@ -261,6 +338,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", + "h2", "http", "http-body", "httparse", @@ -273,6 +351,16 @@ dependencies = [ "want", ] +[[package]] +name = "indexmap" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.9" @@ -327,8 +415,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] @@ -361,6 +451,10 @@ dependencies = [ "webpki", ] +[[package]] +name = "linkerd-errno" +version = "0.1.0" + [[package]] name = "linkerd-error" version = "0.1.0" @@ -368,6 +462,77 @@ dependencies = [ "futures", ] +[[package]] +name = "linkerd-identity" +version = "0.1.0" +dependencies = [ + "linkerd-dns-name", + "ring", + "rustls", + "thiserror", + "tracing", + "untrusted", + "webpki", +] + +[[package]] +name = "linkerd-io" +version = "0.1.0" +dependencies = [ + "async-trait", + "bytes", + "futures", + "linkerd-errno", + "pin-project", + "tokio", + "tokio-rustls", + "tokio-util", +] + +[[package]] +name = "linkerd-metrics" +version = "0.1.0" +dependencies = [ + "deflate", + "http", + "hyper", + "indexmap", + "tracing", +] + +[[package]] +name = "linkerd-proxy-transport" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "libc", + "linkerd-errno", + "linkerd-error", + "linkerd-io", + "linkerd-metrics", + "linkerd-stack", + "pin-project", + "socket2", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "linkerd-stack" +version = "0.1.0" +dependencies = [ + "dyn-clone", + "futures", + "linkerd-error", + "pin-project", + "tokio", + "tower", + "tracing", +] + [[package]] name = "linkerd-tracing" version = "0.1.0" @@ -420,6 +585,37 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +[[package]] +name = "mio" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -591,6 +787,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + [[package]] name = "ryu" version = "1.0.5" @@ -603,6 +812,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "serde" version = "1.0.125" @@ -641,6 +860,17 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +[[package]] +name = "socket2" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +dependencies = [ + "cfg-if", + "libc", + "winapi", +] + [[package]] name = "spin" version = "0.5.2" @@ -705,10 +935,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83f0c8e7c0addab50b663055baf787d0af7f413a46e6e7fb9559a4e4db7137a5" dependencies = [ "autocfg", + "bytes", + "libc", + "memchr", + "mio", "pin-project-lite", + "tokio-macros", "tracing", ] +[[package]] +name = "tokio-macros" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-trace" version = "0.1.0" @@ -721,6 +989,20 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tokio-util" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + [[package]] name = "tower" version = "0.4.7" @@ -728,9 +1010,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" dependencies = [ "futures-core", + "futures-util", "pin-project", + "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -752,6 +1037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", diff --git a/linkerd/app/inbound/fuzz/Cargo.lock b/linkerd/app/inbound/fuzz/Cargo.lock index 551d503fcd..48545ac07a 100644 --- a/linkerd/app/inbound/fuzz/Cargo.lock +++ b/linkerd/app/inbound/fuzz/Cargo.lock @@ -121,6 +121,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + [[package]] name = "crc32fast" version = "1.2.1" @@ -130,6 +143,26 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if", + "lazy_static", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -555,6 +588,22 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linkerd-access-log" +version = "0.1.0" +dependencies = [ + "base64", + "chrono", + "futures", + "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", + "pin-project", + "tracing", + "tracing-subscriber", +] + [[package]] name = "linkerd-addr" version = "0.1.0" @@ -575,6 +624,7 @@ dependencies = [ "hyper", "indexmap", "ipnet", + "linkerd-access-log", "linkerd-addr", "linkerd-cache", "linkerd-concurrency-limit", @@ -1264,11 +1314,13 @@ dependencies = [ "html-escape", "http", "hyper", + "linkerd-access-log", "linkerd-error", "serde_json", "tokio", "tokio-trace", "tracing", + "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -1402,6 +1454,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -1904,6 +1975,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "tinyvec" version = "1.2.0" @@ -2094,6 +2175,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.15" @@ -2142,6 +2234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", + "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/dns/fuzz/Cargo.lock b/linkerd/dns/fuzz/Cargo.lock index 9bb4085413..0a4008fe65 100644 --- a/linkerd/dns/fuzz/Cargo.lock +++ b/linkerd/dns/fuzz/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ansi_term" version = "0.12.1" @@ -89,6 +95,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -116,6 +131,23 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", + "gzip-header", +] + +[[package]] +name = "dyn-clone" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" + [[package]] name = "enum-as-inner" version = "0.3.3" @@ -247,6 +279,40 @@ dependencies = [ "wasi", ] +[[package]] +name = "gzip-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + [[package]] name = "heck" version = "0.3.2" @@ -329,6 +395,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", + "h2", "http", "http-body", "httparse", @@ -352,6 +419,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indexmap" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.9" @@ -430,8 +507,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] @@ -470,6 +549,10 @@ dependencies = [ "webpki", ] +[[package]] +name = "linkerd-errno" +version = "0.1.0" + [[package]] name = "linkerd-error" version = "0.1.0" @@ -477,6 +560,77 @@ dependencies = [ "futures", ] +[[package]] +name = "linkerd-identity" +version = "0.1.0" +dependencies = [ + "linkerd-dns-name", + "ring", + "rustls", + "thiserror", + "tracing", + "untrusted", + "webpki", +] + +[[package]] +name = "linkerd-io" +version = "0.1.0" +dependencies = [ + "async-trait", + "bytes", + "futures", + "linkerd-errno", + "pin-project", + "tokio", + "tokio-rustls", + "tokio-util", +] + +[[package]] +name = "linkerd-metrics" +version = "0.1.0" +dependencies = [ + "deflate", + "http", + "hyper", + "indexmap", + "tracing", +] + +[[package]] +name = "linkerd-proxy-transport" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "libc", + "linkerd-errno", + "linkerd-error", + "linkerd-io", + "linkerd-metrics", + "linkerd-stack", + "pin-project", + "socket2", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "linkerd-stack" +version = "0.1.0" +dependencies = [ + "dyn-clone", + "futures", + "linkerd-error", + "pin-project", + "tokio", + "tower", + "tracing", +] + [[package]] name = "linkerd-tracing" version = "0.1.0" @@ -820,6 +974,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + [[package]] name = "ryu" version = "1.0.5" @@ -832,6 +999,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "serde" version = "1.0.125" @@ -965,9 +1142,43 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", + "tokio-macros", "tracing", ] +[[package]] +name = "tokio-macros" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-trace" version = "0.1.0" @@ -980,6 +1191,20 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tokio-util" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + [[package]] name = "tower" version = "0.4.7" @@ -987,9 +1212,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" dependencies = [ "futures-core", + "futures-util", "pin-project", + "tokio", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -1011,6 +1239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", diff --git a/linkerd/proxy/http/fuzz/Cargo.lock b/linkerd/proxy/http/fuzz/Cargo.lock index e7d2c83ce3..4851236293 100644 --- a/linkerd/proxy/http/fuzz/Cargo.lock +++ b/linkerd/proxy/http/fuzz/Cargo.lock @@ -458,8 +458,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] @@ -479,6 +481,15 @@ dependencies = [ "tracing", ] +[[package]] +name = "linkerd-dns-name" +version = "0.1.0" +dependencies = [ + "thiserror", + "untrusted", + "webpki", +] + [[package]] name = "linkerd-drain" version = "0.1.0" @@ -524,6 +535,19 @@ dependencies = [ "tower", ] +[[package]] +name = "linkerd-identity" +version = "0.1.0" +dependencies = [ + "linkerd-dns-name", + "ring", + "rustls", + "thiserror", + "tracing", + "untrusted", + "webpki", +] + [[package]] name = "linkerd-io" version = "0.1.0" diff --git a/linkerd/tls/fuzz/Cargo.lock b/linkerd/tls/fuzz/Cargo.lock index cf2def8120..8868966fb8 100644 --- a/linkerd/tls/fuzz/Cargo.lock +++ b/linkerd/tls/fuzz/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ansi_term" version = "0.12.1" @@ -89,6 +95,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -110,6 +125,17 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", + "gzip-header", +] + [[package]] name = "dyn-clone" version = "1.0.4" @@ -214,6 +240,40 @@ dependencies = [ "slab", ] +[[package]] +name = "gzip-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + [[package]] name = "hermit-abi" version = "0.1.18" @@ -276,6 +336,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", + "h2", "http", "http-body", "httparse", @@ -288,6 +349,16 @@ dependencies = [ "want", ] +[[package]] +name = "indexmap" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.9" @@ -342,8 +413,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] @@ -399,6 +472,37 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "linkerd-metrics" +version = "0.1.0" +dependencies = [ + "deflate", + "http", + "hyper", + "indexmap", + "tracing", +] + +[[package]] +name = "linkerd-proxy-transport" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "libc", + "linkerd-errno", + "linkerd-error", + "linkerd-io", + "linkerd-metrics", + "linkerd-stack", + "pin-project", + "socket2", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + [[package]] name = "linkerd-stack" version = "0.1.0" @@ -771,6 +875,17 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +[[package]] +name = "socket2" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +dependencies = [ + "cfg-if", + "libc", + "winapi", +] + [[package]] name = "spin" version = "0.5.2" @@ -866,6 +981,17 @@ dependencies = [ "webpki", ] +[[package]] +name = "tokio-stream" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-trace" version = "0.1.0" @@ -901,6 +1027,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project", + "tokio", "tower-layer", "tower-service", "tracing", diff --git a/linkerd/transport-header/fuzz/Cargo.lock b/linkerd/transport-header/fuzz/Cargo.lock index a52466b29b..98386a0d63 100644 --- a/linkerd/transport-header/fuzz/Cargo.lock +++ b/linkerd/transport-header/fuzz/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ansi_term" version = "0.12.1" @@ -98,6 +104,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -119,6 +134,17 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", + "gzip-header", +] + [[package]] name = "derive_arbitrary" version = "1.0.0" @@ -257,6 +283,34 @@ dependencies = [ "wasi", ] +[[package]] +name = "gzip-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.9.1" @@ -334,6 +388,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", + "h2", "http", "http-body", "httparse", @@ -419,8 +474,10 @@ dependencies = [ "chrono", "futures", "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", "pin-project", - "tower", "tracing", "tracing-subscriber", ] @@ -445,6 +502,19 @@ dependencies = [ "futures", ] +[[package]] +name = "linkerd-identity" +version = "0.1.0" +dependencies = [ + "linkerd-dns-name", + "ring", + "rustls", + "thiserror", + "tracing", + "untrusted", + "webpki", +] + [[package]] name = "linkerd-io" version = "0.1.0" @@ -459,6 +529,37 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "linkerd-metrics" +version = "0.1.0" +dependencies = [ + "deflate", + "http", + "hyper", + "indexmap", + "tracing", +] + +[[package]] +name = "linkerd-proxy-transport" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "libc", + "linkerd-errno", + "linkerd-error", + "linkerd-io", + "linkerd-metrics", + "linkerd-stack", + "pin-project", + "socket2", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + [[package]] name = "linkerd-stack" version = "0.1.0" @@ -961,6 +1062,17 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +[[package]] +name = "socket2" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +dependencies = [ + "cfg-if", + "libc", + "winapi", +] + [[package]] name = "spin" version = "0.5.2" @@ -1075,6 +1187,17 @@ dependencies = [ "webpki", ] +[[package]] +name = "tokio-stream" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-trace" version = "0.1.0" @@ -1110,6 +1233,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project", + "tokio", "tower-layer", "tower-service", "tracing", From 777e0e55782cac7366bdd1d9ec57edacecb212e6 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 16:04:49 +0000 Subject: [PATCH 15/50] mark inline; use CONTENT_LENGTH constant --- linkerd/access-log/src/tower.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs index a2b55a63ca..1a89998fd7 100644 --- a/linkerd/access-log/src/tower.rs +++ b/linkerd/access-log/src/tower.rs @@ -44,6 +44,7 @@ pub struct AccessLogFuture { impl svc::layer::Layer for AccessLogLayer { type Service = NewAccessLog; + #[inline] fn layer(&self, inner: N) -> Self::Service { Self::Service { inner } } @@ -75,6 +76,7 @@ where type Error = S::Error; type Future = AccessLogFuture; + #[inline] fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { self.inner.poll_ready(cx) } @@ -183,7 +185,7 @@ where response .headers() - .get("Content-Length") + .get(http::header::CONTENT_LENGTH) .and_then(|x| x.to_str().ok()) .map(|x| span.record("response_bytes", &x)); From 449fef022cdb7215f1f2bbe90c53a7af66a5426c Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 21:56:14 +0000 Subject: [PATCH 16/50] tracing: Simplify initialization The `Settings::build` method is fairly large and complex. This change splits into a few smaller units and reduces boilerplate--especially around reading the settings from the environment. This change is being made in service of #601 to help avoid making the build method even more complicated. --- linkerd/tracing/src/lib.rs | 173 ++++++++++++++++++++---------------- linkerd/tracing/src/test.rs | 6 +- 2 files changed, 96 insertions(+), 83 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 41fc470c48..e3670b320b 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -12,7 +12,15 @@ use std::{env, str}; pub use tokio_trace::tasks::TaskList; use tokio_trace::tasks::TasksLayer; use tracing::Dispatch; -use tracing_subscriber::{fmt::format, prelude::*}; +use tracing_subscriber::{ + fmt::format::{self, DefaultFields}, + layer::Layered, + prelude::*, + reload, EnvFilter, +}; + +type Registry = + Layered, tracing_subscriber::Registry>; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; @@ -23,16 +31,10 @@ const DEFAULT_LOG_FORMAT: &str = "PLAIN"; /// Initialize tracing and logging with the value of the `ENV_LOG` /// environment variable as the verbosity-level filter. pub fn init() -> Result { - let log_level = env::var(ENV_LOG_LEVEL).unwrap_or_else(|_| DEFAULT_LOG_LEVEL.to_string()); - if let "OFF" = log_level.to_uppercase().trim() { - return Ok(Handle(Inner::Disabled)); - } - - let log_format = env::var(ENV_LOG_FORMAT).unwrap_or_else(|_| DEFAULT_LOG_FORMAT.to_string()); - let (dispatch, handle) = Settings::default() - .filter(log_level) - .format(log_format) - .build(); + let (dispatch, handle) = match Settings::from_env() { + Some(s) => s.build(), + None => return Ok(Handle(Inner::Disabled)), + }; // Set the default subscriber. tracing::dispatcher::set_global_default(dispatch)?; @@ -61,90 +63,105 @@ pub fn init_log_compat() -> Result<(), Error> { pub struct Settings { filter: Option, format: Option, - test: bool, + is_test: bool, } impl Settings { - pub fn from_env() -> Self { - let mut settings = Settings::default(); - if let Ok(filter) = env::var(ENV_LOG_LEVEL) { - settings = settings.filter(filter); - } - if let Ok(format) = env::var(ENV_LOG_FORMAT) { - settings = settings.format(format); + pub fn from_env() -> Option { + let filter = std::env::var(ENV_LOG_LEVEL).ok(); + if let Some(level) = filter.as_ref() { + if level.to_uppercase().trim() == "OFF" { + return None; + } } - settings + + Some(Self { + filter, + format: std::env::var(ENV_LOG_FORMAT).ok(), + is_test: false, + }) } - pub fn filter(self, filter: impl Into) -> Self { + fn for_test(filter: String, format: String) -> Self { Self { - filter: Some(filter.into()), - ..self + filter: Some(filter), + format: Some(format), + is_test: true, } } - pub fn format(self, format: impl Into) -> Self { - Self { - format: Some(format.into()), - ..self - } + fn format(&self) -> String { + self.format + .clone() + .unwrap_or_else(|| DEFAULT_LOG_FORMAT.to_string()) + .to_uppercase() } - pub fn test(self, test: bool) -> Self { - Self { test, ..self } + fn mk_registry(&self) -> (Registry, level::Handle) { + let filter = self + .filter + .clone() + .unwrap_or_else(|| DEFAULT_LOG_LEVEL.to_string()); + let filter = EnvFilter::new(filter); + let (filter, level) = reload::Layer::new(filter); + let level = level::Handle::new(level); + (tracing_subscriber::registry().with(filter), level) } - pub fn build(self) -> (Dispatch, Handle) { - let filter = self.filter.unwrap_or_else(|| DEFAULT_LOG_LEVEL.to_string()); - let format = self - .format - .unwrap_or_else(|| DEFAULT_LOG_FORMAT.to_string()); + fn mk_json(&self, registry: Registry) -> (Dispatch, TaskList) { + let (tasks, tasks_layer) = TasksLayer::::new(); + let registry = registry.with(tasks_layer); - // Set up the subscriber let fmt = tracing_subscriber::fmt::format() .with_timer(Uptime::starting_now()) - .with_thread_ids(!self.test); - let filter = tracing_subscriber::EnvFilter::new(filter); - let (filter, level) = tracing_subscriber::reload::Layer::new(filter); - let level = level::Handle::new(level); - let registry = tracing_subscriber::registry().with(filter); - - let (dispatch, tasks) = match format.to_uppercase().as_ref() { - "JSON" => { - let (tasks, tasks_layer) = TasksLayer::::new(); - let fmt = fmt - // Configure the formatter to output JSON logs. - .json() - // Output the current span context as a JSON list. - .with_span_list(true) - // Don't output a field for the current span, since this - // would duplicate information already in the span list. - .with_current_span(false); - let fmt = tracing_subscriber::fmt::layer() - // Use the JSON event formatter. - .event_format(fmt) - // Since we're using the JSON event formatter, we must also - // use the JSON field formatter. - .fmt_fields(format::JsonFields::default()); - let registry = registry.with(tasks_layer); - let dispatch = if self.test { - registry.with(fmt.with_test_writer()).into() - } else { - registry.with(fmt).into() - }; - (dispatch, tasks) - } - _ => { - let (tasks, tasks_layer) = TasksLayer::::new(); - let registry = registry.with(tasks_layer); - let fmt = tracing_subscriber::fmt::layer().event_format(fmt); - let dispatch = if self.test { - registry.with(fmt.with_test_writer()).into() - } else { - registry.with(fmt).into() - }; - (dispatch, tasks) - } + .with_thread_ids(!self.is_test) + // Configure the formatter to output JSON logs. + .json() + // Output the current span context as a JSON list. + .with_span_list(true) + // Don't output a field for the current span, since this + // would duplicate information already in the span list. + .with_current_span(false); + + let fmt = tracing_subscriber::fmt::layer() + // Use the JSON event formatter. + .event_format(fmt) + // Since we're using the JSON event formatter, we must also + // use the JSON field formatter. + .fmt_fields(format::JsonFields::default()); + + let dispatch = if self.is_test { + registry.with(fmt.with_test_writer()).into() + } else { + registry.with(fmt).into() + }; + + (dispatch, tasks.into()) + } + + fn mk_plain(&self, registry: Registry) -> (Dispatch, TaskList) { + let (tasks, tasks_layer) = TasksLayer::::new(); + let registry = registry.with(tasks_layer); + + let fmt = tracing_subscriber::fmt::format() + .with_timer(Uptime::starting_now()) + .with_thread_ids(!self.is_test); + let fmt = tracing_subscriber::fmt::layer().event_format(fmt); + let dispatch = if self.is_test { + registry.with(fmt.with_test_writer()).into() + } else { + registry.with(fmt).into() + }; + + (dispatch, tasks.into()) + } + + pub fn build(self) -> (Dispatch, Handle) { + let (registry, level) = self.mk_registry(); + + let (dispatch, tasks) = match self.format().as_ref() { + "JSON" => self.mk_json(registry), + _ => self.mk_plain(registry), }; (dispatch, Handle(Inner::Enabled { level, tasks })) diff --git a/linkerd/tracing/src/test.rs b/linkerd/tracing/src/test.rs index 9f15857ef9..894359456c 100644 --- a/linkerd/tracing/src/test.rs +++ b/linkerd/tracing/src/test.rs @@ -15,11 +15,7 @@ pub fn trace_subscriber(default: impl ToString) -> (Dispatch, Handle) { // This may fail, since the global log compat layer may have been // initialized by another test. let _ = init_log_compat(); - Settings::default() - .filter(log_level) - .format(log_format) - .test(true) - .build() + Settings::for_test(log_level, log_format).build() } pub fn with_default_filter(default: impl ToString) -> tracing::dispatcher::DefaultGuard { From 88bbd3bb854a086280dd2f830e8405e1fed04ba5 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 22:56:42 +0000 Subject: [PATCH 17/50] clone golf --- linkerd/tracing/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index e3670b320b..5c7480296a 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -92,8 +92,9 @@ impl Settings { fn format(&self) -> String { self.format - .clone() - .unwrap_or_else(|| DEFAULT_LOG_FORMAT.to_string()) + .as_ref() + .map(|f| f.as_str()) + .unwrap_or_else(|| DEFAULT_LOG_FORMAT) .to_uppercase() } From 892bc6361129e4e5cc248bcf96c86a63bc1e5a41 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 22:57:55 +0000 Subject: [PATCH 18/50] clippay --- linkerd/tracing/src/lib.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 5c7480296a..3fac37d07c 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -92,9 +92,8 @@ impl Settings { fn format(&self) -> String { self.format - .as_ref() - .map(|f| f.as_str()) - .unwrap_or_else(|| DEFAULT_LOG_FORMAT) + .as_deref() + .unwrap_or(DEFAULT_LOG_FORMAT) .to_uppercase() } @@ -137,7 +136,7 @@ impl Settings { registry.with(fmt).into() }; - (dispatch, tasks.into()) + (dispatch, tasks) } fn mk_plain(&self, registry: Registry) -> (Dispatch, TaskList) { @@ -154,7 +153,7 @@ impl Settings { registry.with(fmt).into() }; - (dispatch, tasks.into()) + (dispatch, tasks) } pub fn build(self) -> (Dispatch, Handle) { From f829918ebe03bff420b0d73f3df5fa4284b5a70c Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 23:00:10 +0000 Subject: [PATCH 19/50] simplify env filter construction --- linkerd/tracing/src/lib.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 3fac37d07c..f71325d6c1 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -98,10 +98,7 @@ impl Settings { } fn mk_registry(&self) -> (Registry, level::Handle) { - let filter = self - .filter - .clone() - .unwrap_or_else(|| DEFAULT_LOG_LEVEL.to_string()); + let filter = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); let filter = EnvFilter::new(filter); let (filter, level) = reload::Layer::new(filter); let level = level::Handle::new(level); From 992647ee101e126a19a7a48653a4a0a45cdef076 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 23:07:42 +0000 Subject: [PATCH 20/50] malkovich --- linkerd/tracing/src/lib.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index f71325d6c1..ac388cb0e4 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -98,11 +98,10 @@ impl Settings { } fn mk_registry(&self) -> (Registry, level::Handle) { - let filter = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); - let filter = EnvFilter::new(filter); - let (filter, level) = reload::Layer::new(filter); - let level = level::Handle::new(level); - (tracing_subscriber::registry().with(filter), level) + let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); + let (filter, level) = reload::Layer::new(EnvFilter::new(log_level)); + let reg = tracing_subscriber::registry().with(filter); + (reg, level::Handle::new(level)) } fn mk_json(&self, registry: Registry) -> (Dispatch, TaskList) { From c53ce37e4b94c56566804c079dd5b4755e268f73 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Wed, 2 Jun 2021 23:41:53 +0000 Subject: [PATCH 21/50] Move struct defintions to the top --- linkerd/tracing/src/lib.rs | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index ac388cb0e4..245cc87d09 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -28,6 +28,25 @@ const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; const DEFAULT_LOG_LEVEL: &str = "warn,linkerd=info"; const DEFAULT_LOG_FORMAT: &str = "PLAIN"; +#[derive(Debug, Default)] +pub struct Settings { + filter: Option, + format: Option, + is_test: bool, +} + +#[derive(Clone)] +pub struct Handle(Inner); + +#[derive(Clone)] +enum Inner { + Disabled, + Enabled { + level: level::Handle, + tasks: TaskList, + }, +} + /// Initialize tracing and logging with the value of the `ENV_LOG` /// environment variable as the verbosity-level filter. pub fn init() -> Result { @@ -59,12 +78,7 @@ pub fn init_log_compat() -> Result<(), Error> { Ok(()) } -#[derive(Debug, Default)] -pub struct Settings { - filter: Option, - format: Option, - is_test: bool, -} +// === impl Settings === impl Settings { pub fn from_env() -> Option { @@ -164,18 +178,6 @@ impl Settings { } } -#[derive(Clone)] -pub struct Handle(Inner); - -#[derive(Clone)] -enum Inner { - Disabled, - Enabled { - level: level::Handle, - tasks: TaskList, - }, -} - // === impl Handle === impl Handle { From 4b56f3d558c68f3ae363a7775e38ae9eedbd5582 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:18:42 +0000 Subject: [PATCH 22/50] Reintroduce access logging with a TODO --- linkerd/tracing/src/access_log.rs | 45 +++++++++++++++ linkerd/tracing/src/lib.rs | 94 +++++++++---------------------- 2 files changed, 72 insertions(+), 67 deletions(-) create mode 100644 linkerd/tracing/src/access_log.rs diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs new file mode 100644 index 0000000000..9270807a33 --- /dev/null +++ b/linkerd/tracing/src/access_log.rs @@ -0,0 +1,45 @@ +use linkerd_access_log::tracing::AccessLogWriter; +use std::{path::PathBuf, sync::Arc}; +pub use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; +use tracing_subscriber::filter::Directive; + +const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; + +#[derive(Clone, Debug)] +pub struct Guard(Arc); + +pub type Writer = AccessLogWriter; + +pub(super) fn build() -> Option<(Writer, Guard, Directive)> { + // Create the access log file, or open it in append-only mode if + // it already exists. + let file = { + let path = { + let p = std::env::var(ENV_ACCESS_LOG).ok()?; + p.parse::() + .map_err(|e| eprintln!("{} is not a valid path: {}", p, e)) + .ok()? + }; + + std::fs::OpenOptions::new() + .append(true) + .create(true) + .open(&path) + .map_err(|e| eprintln!("failed to open file {}: {}", path.display(), e,)) + .ok()? + }; + + // If we successfully created or opened the access log file, + // build the access log layer. + eprintln!("writing access log to {:?}", file); + let (non_blocking, guard) = tracing_appender::non_blocking(file); + let writer = AccessLogWriter::new().with_writer(non_blocking); + + // Also, ensure that the `tracing` filter configuration will + // always enable the access log spans. + let directive = "access_log=info" + .parse() + .expect("hard-coded filter directive must parse"); + + Some((writer, Guard(guard.into()), directive)) +} diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index f301342b88..3c66f964f8 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -2,18 +2,16 @@ #![forbid(unsafe_code)] #![allow(clippy::inconsistent_struct_constructor)] +mod access_log; pub mod level; pub mod test; mod uptime; use self::uptime::Uptime; -//use linkerd_access_log::tracing::AccessLogWriter; use linkerd_error::Error; -//use std::{path::PathBuf, sync::Arc}; pub use tokio_trace::tasks::TaskList; use tokio_trace::tasks::TasksLayer; use tracing::Dispatch; -//use tracing_appender::non_blocking::WorkerGuard; use tracing_subscriber::{ fmt::format::{self, DefaultFields}, layer::Layered, @@ -21,12 +19,13 @@ use tracing_subscriber::{ reload, EnvFilter, }; -type Registry = - Layered, tracing_subscriber::Registry>; +type Registry = Layered< + access_log::Writer, + Layered, tracing_subscriber::Registry>, +>; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; -//const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; const DEFAULT_LOG_LEVEL: &str = "warn,linkerd=info"; const DEFAULT_LOG_FORMAT: &str = "PLAIN"; @@ -47,6 +46,7 @@ enum Inner { Enabled { level: level::Handle, tasks: TaskList, + guard: access_log::Guard, }, } @@ -83,20 +83,6 @@ pub fn init_log_compat() -> Result<(), Error> { // === impl Settings === -#[derive(Clone)] -pub struct Handle(Inner); - -#[derive(Clone)] -enum Inner { - Disabled, - Enabled { - level: level::Handle, - tasks: TaskList, - }, -} - -// === impl Settings === - impl Settings { pub fn from_env() -> Option { let filter = std::env::var(ENV_LOG_LEVEL).ok(); @@ -128,11 +114,19 @@ impl Settings { .to_uppercase() } - fn mk_registry(&self) -> (Registry, level::Handle) { - let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); - let (filter, level) = reload::Layer::new(EnvFilter::new(log_level)); - let reg = tracing_subscriber::registry().with(filter); - (reg, level::Handle::new(level)) + fn mk_registry(&self) -> (Registry, level::Handle, access_log::Guard) { + let filter = { + let f = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); + EnvFilter::new(f) + }; + + let (access_log, guard, directive) = + access_log::build().expect("XXX FIXME handle case when access log isn't used"); + let filter = filter.add_directive(directive); + + let (filter, level) = reload::Layer::new(filter); + let reg = tracing_subscriber::registry().with(filter).with(access_log); + (reg, level::Handle::new(level), guard) } fn mk_json(&self, registry: Registry) -> (Dispatch, TaskList) { @@ -184,14 +178,20 @@ impl Settings { } pub fn build(self) -> (Dispatch, Handle) { - let (registry, level) = self.mk_registry(); + let (registry, level, guard) = self.mk_registry(); let (dispatch, tasks) = match self.format().as_ref() { "JSON" => self.mk_json(registry), _ => self.mk_plain(registry), }; - (dispatch, Handle(Inner::Enabled { level, tasks })) + let handle = Handle(Inner::Enabled { + level, + tasks, + guard, + }); + + (dispatch, handle) } } @@ -217,43 +217,3 @@ impl Handle { } } } - -/* -let (access_log, flush_guard, filter) = if let Some((access_log, flush_guard)) = - self.access_log.and_then(|path| { - // Create the access log file, or open it in append-only mode if - // it already exists. - let file = fs::OpenOptions::new() - .append(true) - .create(true) - .open(&path) - .map_err(|e| { - eprintln!( - "failed to create access log: {} ({}={})", - e, - ENV_ACCESS_LOG, - path.display() - ) - }) - .ok()?; - - // If we successfully created or opened the access log file, - // build the access log layer. - eprintln!("writing access log to {:?}", file); - let (non_blocking, guard) = tracing_appender::non_blocking(file); - let access_log = AccessLogWriter::new().with_writer(non_blocking); - - Some((access_log, guard)) - }) { - // Also, ensure that the `tracing` filter configuration will - // always enable the access log spans. - let filter = filter.add_directive( - "access_log=info" - .parse() - .expect("hard-coded filter directive should always parse"), - ); - (Some(access_log), Some(flush_guard), filter) -} else { - (None, None, filter) -}; - */ From af6342194ab72849710b6231794594a0afd85ca9 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:34:59 +0000 Subject: [PATCH 23/50] Split the access-log module and the log writer --- Cargo.lock | 1 - linkerd/access-log/src/lib.rs | 184 +++++++++++++++++++++++++- linkerd/access-log/src/tower.rs | 198 ---------------------------- linkerd/access-log/src/tracing.rs | 74 ----------- linkerd/app/inbound/src/http/mod.rs | 4 +- linkerd/tracing/Cargo.toml | 1 - linkerd/tracing/src/access_log.rs | 69 +++++++++- 7 files changed, 246 insertions(+), 285 deletions(-) delete mode 100644 linkerd/access-log/src/tower.rs delete mode 100644 linkerd/access-log/src/tracing.rs diff --git a/Cargo.lock b/Cargo.lock index 129ac46ae8..c5a4ab96bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1474,7 +1474,6 @@ dependencies = [ name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "linkerd-access-log", "linkerd-error", "tokio", "tokio-trace", diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs index 4ed257aa64..7b89e4fde6 100644 --- a/linkerd/access-log/src/lib.rs +++ b/linkerd/access-log/src/lib.rs @@ -1,4 +1,184 @@ #![deny(warnings, rust_2018_idioms)] -pub mod tower; -pub mod tracing; +use futures::TryFuture; +use linkerd_identity as identity; +use linkerd_proxy_transport::{ClientAddr, Remote}; +use linkerd_stack as svc; +use pin_project::pin_project; +use std::{ + future::Future, + net::SocketAddr, + pin::Pin, + task::{Context, Poll}, + time::{Duration, Instant}, +}; +use svc::{NewService, Param}; +use tracing::{field, span, Level, Span}; + +#[derive(Clone, Debug)] +pub struct NewAccessLog { + inner: N, +} + +#[derive(Clone, Debug)] +pub struct AccessLogContext { + inner: S, + client_addr: SocketAddr, + client_id: Option, +} + +struct ResponseFutureInner { + span: Span, + start: Instant, + processing: Duration, +} + +#[pin_project] +pub struct AccessLogFuture { + data: Option, + + #[pin] + inner: F, +} + +impl NewAccessLog { + pub fn layer() -> impl svc::layer::Layer { + svc::layer::mk(|inner| NewAccessLog { inner }) + } +} + +impl NewService for NewAccessLog +where + T: Param> + Param>, + N: NewService, +{ + type Service = AccessLogContext; + + fn new_service(&mut self, target: T) -> Self::Service { + let Remote(ClientAddr(client_addr)) = target.param(); + let client_id = target.param(); + let inner = self.inner.new_service(target); + AccessLogContext { + inner, + client_addr, + client_id, + } + } +} + +impl svc::Service> for AccessLogContext +where + S: svc::Service, Response = http::Response>, +{ + type Response = S::Response; + type Error = S::Error; + type Future = AccessLogFuture; + + #[inline] + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.inner.poll_ready(cx) + } + + fn call(&mut self, request: http::Request) -> Self::Future { + let get_header = |name: http::header::HeaderName| { + request + .headers() + .get(name) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default() + }; + + let trace_id = || { + let headers = request.headers(); + headers + .get("x-b3-traceid") + .or_else(|| headers.get("X-Request-ID")) + .or_else(|| headers.get("X-Amzn-Trace-Id")) + .and_then(|x| x.to_str().ok()) + .unwrap_or_default() + }; + + let timestamp = chrono::Utc::now().format_with_items( + [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), + ); + + let span = span!(target: "access_log", Level::INFO, "http", + %timestamp, + client.addr = %self.client_addr, + client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), + processing_ns = field::Empty, + total_ns = field::Empty, + method = request.method().as_str(), + uri = %request.uri(), + version = ?request.version(), + user_agent = get_header(http::header::USER_AGENT), + host = get_header(http::header::HOST), + trace_id = trace_id(), + status = field::Empty, + request_bytes = get_header(http::header::CONTENT_LENGTH), + response_bytes = field::Empty + ); + + if span.is_disabled() { + return AccessLogFuture { + data: None, + inner: self.inner.call(request), + }; + } + + AccessLogFuture { + data: Some(ResponseFutureInner { + span, + start: Instant::now(), + processing: Duration::from_secs(0), + }), + inner: self.inner.call(request), + } + } +} + +impl Future for AccessLogFuture +where + F: TryFuture>, +{ + type Output = Result; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let mut this = self.project(); + + let data: &mut ResponseFutureInner = match &mut this.data { + Some(data) => data, + None => return this.inner.try_poll(cx), + }; + + let _enter = data.span.enter(); + let poll_start = Instant::now(); + + let response: http::Response = match this.inner.try_poll(cx) { + Poll::Pending => { + data.processing += Instant::now().duration_since(poll_start); + return Poll::Pending; + } + Poll::Ready(Err(e)) => return Poll::Ready(Err(e)), + Poll::Ready(Ok(response)) => response, + }; + + let now = Instant::now(); + let total_ns = now.duration_since(data.start).as_nanos(); + let processing_ns = (now.duration_since(poll_start) + data.processing).as_nanos(); + + let span = &data.span; + + response + .headers() + .get(http::header::CONTENT_LENGTH) + .and_then(|x| x.to_str().ok()) + .map(|x| span.record("response_bytes", &x)); + + span.record("status", &response.status().as_u16()); + span.record("total_ns", &field::display(total_ns)); + span.record("processing_ns", &field::display(processing_ns)); + + Poll::Ready(Ok(response)) + } +} diff --git a/linkerd/access-log/src/tower.rs b/linkerd/access-log/src/tower.rs deleted file mode 100644 index 1a89998fd7..0000000000 --- a/linkerd/access-log/src/tower.rs +++ /dev/null @@ -1,198 +0,0 @@ -use futures::TryFuture; -use linkerd_identity as identity; -use linkerd_proxy_transport::{ClientAddr, Remote}; -use linkerd_stack as svc; -use pin_project::pin_project; -use std::future::Future; -use std::net::SocketAddr; -use std::pin::Pin; -use std::task::{Context, Poll}; -use std::time::{Duration, Instant}; -use svc::{NewService, Param}; -use tracing::{field, span, Level, Span}; - -/// A tower layer that associates a `tracing` `Span` with each request -#[derive(Clone)] -pub struct AccessLogLayer {} - -#[derive(Clone)] -pub struct AccessLogContext { - inner: S, - client_addr: SocketAddr, - client_id: Option, -} - -#[derive(Clone)] -pub struct NewAccessLog { - inner: S, -} - -struct ResponseFutureInner { - span: Span, - start: Instant, - processing: Duration, -} - -#[pin_project] -pub struct AccessLogFuture { - data: Option, - - #[pin] - inner: F, -} - -impl svc::layer::Layer for AccessLogLayer { - type Service = NewAccessLog; - - #[inline] - fn layer(&self, inner: N) -> Self::Service { - Self::Service { inner } - } -} - -impl NewService for NewAccessLog -where - T: Param> + Param>, - S: NewService, -{ - type Service = AccessLogContext; - fn new_service(&mut self, target: T) -> Self::Service { - let Remote(ClientAddr(client_addr)) = target.param(); - let client_id = target.param(); - let inner = self.inner.new_service(target); - AccessLogContext { - inner, - client_addr, - client_id, - } - } -} - -impl svc::Service> for AccessLogContext -where - S: svc::Service, Response = http::Response>, -{ - type Response = S::Response; - type Error = S::Error; - type Future = AccessLogFuture; - - #[inline] - fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.inner.poll_ready(cx) - } - - fn call(&mut self, request: http::Request) -> Self::Future { - let get_header = |name: http::header::HeaderName| { - request - .headers() - .get(name) - .and_then(|x| x.to_str().ok()) - .unwrap_or_default() - }; - - let trace_id = || { - let headers = request.headers(); - headers - .get("x-b3-traceid") - .or_else(|| headers.get("X-Request-ID")) - .or_else(|| headers.get("X-Amzn-Trace-Id")) - .and_then(|x| x.to_str().ok()) - .unwrap_or_default() - }; - - let timestamp = chrono::Utc::now().format_with_items( - [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), - ); - - let span = span!(target: "access_log", Level::INFO, "http", - %timestamp, - client.addr = %self.client_addr, - client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), - processing_ns = field::Empty, - total_ns = field::Empty, - method = request.method().as_str(), - uri = %request.uri(), - version = ?request.version(), - user_agent = get_header(http::header::USER_AGENT), - host = get_header(http::header::HOST), - trace_id = trace_id(), - status = field::Empty, - request_bytes = get_header(http::header::CONTENT_LENGTH), - response_bytes = field::Empty - ); - - if span.is_disabled() { - return AccessLogFuture { - data: None, - inner: self.inner.call(request), - }; - } - - AccessLogFuture { - data: Some(ResponseFutureInner { - span, - start: Instant::now(), - processing: Duration::from_secs(0), - }), - inner: self.inner.call(request), - } - } -} - -impl AccessLogLayer { - pub fn new() -> Self { - Self {} - } -} - -impl Default for AccessLogLayer { - fn default() -> Self { - Self::new() - } -} - -impl Future for AccessLogFuture -where - F: TryFuture>, -{ - type Output = Result; - - fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - let mut this = self.project(); - - let data: &mut ResponseFutureInner = match &mut this.data { - Some(data) => data, - None => return this.inner.try_poll(cx), - }; - - let _enter = data.span.enter(); - let poll_start = Instant::now(); - - let response: http::Response = match this.inner.try_poll(cx) { - Poll::Pending => { - data.processing += Instant::now().duration_since(poll_start); - return Poll::Pending; - } - Poll::Ready(Err(e)) => return Poll::Ready(Err(e)), - Poll::Ready(Ok(response)) => response, - }; - - let now = Instant::now(); - let total_ns = now.duration_since(data.start).as_nanos(); - let processing_ns = (now.duration_since(poll_start) + data.processing).as_nanos(); - - let span = &data.span; - - response - .headers() - .get(http::header::CONTENT_LENGTH) - .and_then(|x| x.to_str().ok()) - .map(|x| span.record("response_bytes", &x)); - - span.record("status", &response.status().as_u16()); - span.record("total_ns", &field::display(total_ns)); - span.record("processing_ns", &field::display(processing_ns)); - - Poll::Ready(Ok(response)) - } -} diff --git a/linkerd/access-log/src/tracing.rs b/linkerd/access-log/src/tracing.rs deleted file mode 100644 index 47356e7489..0000000000 --- a/linkerd/access-log/src/tracing.rs +++ /dev/null @@ -1,74 +0,0 @@ -use std::io::{self, Write}; -use std::marker::PhantomData; -use tracing::{Id, Metadata, Subscriber}; -use tracing_subscriber::{ - fmt::{ - format::{DefaultFields, JsonFields}, - FormatFields, FormattedFields, MakeWriter, - }, - layer::Context, - registry::LookupSpan, - Layer, -}; - -pub struct AccessLogWriter { - make_writer: W, - _f: PhantomData, -} - -impl AccessLogWriter io::Stdout, DefaultFields> { - pub fn new() -> Self { - Self { - make_writer: io::stdout, - _f: PhantomData::default(), - } - } -} - -impl Default for AccessLogWriter io::Stdout, DefaultFields> { - fn default() -> Self { - Self::new() - } -} - -impl AccessLogWriter { - #[inline(always)] - fn cares_about(&self, meta: &Metadata<'_>) -> bool { - meta.target() == "access_log" - } - - pub fn json(self) -> AccessLogWriter { - AccessLogWriter { - make_writer: self.make_writer, - _f: PhantomData::default(), - } - } - - pub fn with_writer(self, make_writer: W2) -> AccessLogWriter - where - W2: MakeWriter + 'static, - { - AccessLogWriter { - make_writer, - _f: Default::default(), - } - } -} - -impl Layer for AccessLogWriter -where - W: MakeWriter + 'static, - S: Subscriber + for<'span> LookupSpan<'span>, - F: for<'writer> FormatFields<'writer> + 'static, -{ - fn on_close(&self, id: Id, ctx: Context<'_, S>) { - if let Some(span) = ctx.span(&id) { - if self.cares_about(span.metadata()) { - if let Some(fields) = span.extensions().get::>() { - let mut writer = self.make_writer.make_writer(); - let _ = writeln!(&mut writer, "{}", fields.fields); - } - } - } - } -} diff --git a/linkerd/app/inbound/src/http/mod.rs b/linkerd/app/inbound/src/http/mod.rs index fb526d7ba0..d5200c8ae2 100644 --- a/linkerd/app/inbound/src/http/mod.rs +++ b/linkerd/app/inbound/src/http/mod.rs @@ -13,7 +13,7 @@ pub use linkerd_app_core::proxy::http::{ Version, }; use linkerd_app_core::{ - access_log::tower::AccessLogLayer, + access_log::NewAccessLog, classify, config::{ProxyConfig, ServerConfig}, dst, errors, http_tracing, identity, io, profiles, @@ -90,7 +90,7 @@ impl Inbound { .push(http::BoxRequest::layer()) .push(http::BoxResponse::layer()), ) - .push(AccessLogLayer::new()) + .push(NewAccessLog::layer()) .check_new_service::>() .instrument(|t: &T| debug_span!("http", v=%Param::::param(t))) .push(http::NewServeHttp::layer(h2_settings, rt.drain.clone())) diff --git a/linkerd/tracing/Cargo.toml b/linkerd/tracing/Cargo.toml index caeb3253c7..ecf155b089 100644 --- a/linkerd/tracing/Cargo.toml +++ b/linkerd/tracing/Cargo.toml @@ -11,7 +11,6 @@ default = [] ansi = ["tracing-subscriber/ansi"] [dependencies] -linkerd-access-log = { path = "../access-log" } linkerd-error = { path = "../error" } tokio = { version = "1", features = ["time"] } tokio-trace = { git = "https://github.com/hawkw/tokio-trace", rev = "7d5998e7cb3beb06ada5983675319dc4853576c5", features = ["serde"] } diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 9270807a33..f33efad3d7 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,14 +1,26 @@ -use linkerd_access_log::tracing::AccessLogWriter; -use std::{path::PathBuf, sync::Arc}; -pub use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; +use std::{io::Write, marker::PhantomData, path::PathBuf, sync::Arc}; +use tracing::{Id, Metadata, Subscriber}; +use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; use tracing_subscriber::filter::Directive; +use tracing_subscriber::{ + fmt::{ + format::{DefaultFields, JsonFields}, + FormatFields, FormattedFields, MakeWriter, + }, + layer::Context, + registry::LookupSpan, + Layer, +}; const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; #[derive(Clone, Debug)] pub struct Guard(Arc); -pub type Writer = AccessLogWriter; +pub(super) struct Writer { + make_writer: NonBlocking, + _f: PhantomData, +} pub(super) fn build() -> Option<(Writer, Guard, Directive)> { // Create the access log file, or open it in append-only mode if @@ -25,15 +37,15 @@ pub(super) fn build() -> Option<(Writer, Guard, Directive)> { .append(true) .create(true) .open(&path) - .map_err(|e| eprintln!("failed to open file {}: {}", path.display(), e,)) + .map_err(|e| eprintln!("Failed to open file {}: {}", path.display(), e,)) .ok()? }; // If we successfully created or opened the access log file, // build the access log layer. - eprintln!("writing access log to {:?}", file); + eprintln!("Writing access log to {:?}", file); let (non_blocking, guard) = tracing_appender::non_blocking(file); - let writer = AccessLogWriter::new().with_writer(non_blocking); + let writer = Writer::new(non_blocking); // Also, ensure that the `tracing` filter configuration will // always enable the access log spans. @@ -43,3 +55,46 @@ pub(super) fn build() -> Option<(Writer, Guard, Directive)> { Some((writer, Guard(guard.into()), directive)) } + +// === impl Writer === + +impl Writer { + pub fn new(make_writer: NonBlocking) -> Self { + Self { + make_writer, + _f: PhantomData::default(), + } + } +} + +impl Writer { + #[inline(always)] + fn cares_about(&self, meta: &Metadata<'_>) -> bool { + meta.target() == "access_log" + } + + #[allow(dead_code)] + pub fn into_json(self) -> Writer { + Writer { + make_writer: self.make_writer, + _f: PhantomData, + } + } +} + +impl Layer for Writer +where + S: Subscriber + for<'span> LookupSpan<'span>, + F: for<'writer> FormatFields<'writer> + 'static, +{ + fn on_close(&self, id: Id, ctx: Context<'_, S>) { + if let Some(span) = ctx.span(&id) { + if self.cares_about(span.metadata()) { + if let Some(fields) = span.extensions().get::>() { + let mut writer = self.make_writer.make_writer(); + let _ = writeln!(&mut writer, "{}", fields.fields); + } + } + } + } +} From b97ac8e8b73c2c25615fbe956cb1c72db00b5b4c Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:40:33 +0000 Subject: [PATCH 24/50] Constify the special tracing target for access logs --- Cargo.lock | 4 +--- linkerd/access-log/Cargo.toml | 3 +-- linkerd/access-log/src/lib.rs | 3 ++- linkerd/tracing/src/access_log.rs | 6 ++++-- linkerd/tracing/src/lib.rs | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5a4ab96bc..b12978e0d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -639,16 +639,15 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" name = "linkerd-access-log" version = "0.1.0" dependencies = [ - "base64", "chrono", "futures", "http", "linkerd-identity", "linkerd-proxy-transport", "linkerd-stack", + "linkerd-tracing", "pin-project", "tracing", - "tracing-subscriber", ] [[package]] @@ -2452,7 +2451,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/access-log/Cargo.toml b/linkerd/access-log/Cargo.toml index 16bcd90c61..83a9ae4db1 100644 --- a/linkerd/access-log/Cargo.toml +++ b/linkerd/access-log/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" publish = false [dependencies] -base64 = "0.13" chrono = "0.4.15" futures = "0.3" http = "0.2" @@ -15,5 +14,5 @@ pin-project = "1" linkerd-stack = { path = "../stack" } linkerd-identity = { path = "../identity" } linkerd-proxy-transport = { path = "../proxy/transport" } +linkerd-tracing = { path = "../tracing" } tracing = "0.1.19" -tracing-subscriber = "0.2.12" diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs index 7b89e4fde6..39e17148f3 100644 --- a/linkerd/access-log/src/lib.rs +++ b/linkerd/access-log/src/lib.rs @@ -4,6 +4,7 @@ use futures::TryFuture; use linkerd_identity as identity; use linkerd_proxy_transport::{ClientAddr, Remote}; use linkerd_stack as svc; +use linkerd_tracing::access_log::TRACE_TARGET; use pin_project::pin_project; use std::{ future::Future, @@ -102,7 +103,7 @@ where [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), ); - let span = span!(target: "access_log", Level::INFO, "http", + let span = span!(target: TRACE_TARGET, Level::INFO, "http", %timestamp, client.addr = %self.client_addr, client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index f33efad3d7..89641a6b3c 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -14,6 +14,8 @@ use tracing_subscriber::{ const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; +pub const TRACE_TARGET: &str = "_access_log"; + #[derive(Clone, Debug)] pub struct Guard(Arc); @@ -49,7 +51,7 @@ pub(super) fn build() -> Option<(Writer, Guard, Directive)> { // Also, ensure that the `tracing` filter configuration will // always enable the access log spans. - let directive = "access_log=info" + let directive = format!("{}=info", TRACE_TARGET) .parse() .expect("hard-coded filter directive must parse"); @@ -70,7 +72,7 @@ impl Writer { impl Writer { #[inline(always)] fn cares_about(&self, meta: &Metadata<'_>) -> bool { - meta.target() == "access_log" + meta.target() == TRACE_TARGET } #[allow(dead_code)] diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 3c66f964f8..0d1c37a443 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -2,7 +2,7 @@ #![forbid(unsafe_code)] #![allow(clippy::inconsistent_struct_constructor)] -mod access_log; +pub mod access_log; pub mod level; pub mod test; mod uptime; From 705d437647bc2be6984b4366ac89fc508cca1ee2 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:41:59 +0000 Subject: [PATCH 25/50] +inline --- linkerd/access-log/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs index 39e17148f3..6121f8a20f 100644 --- a/linkerd/access-log/src/lib.rs +++ b/linkerd/access-log/src/lib.rs @@ -43,6 +43,7 @@ pub struct AccessLogFuture { } impl NewAccessLog { + #[inline] pub fn layer() -> impl svc::layer::Layer { svc::layer::mk(|inner| NewAccessLog { inner }) } From ad9b54cc7faac13e390d206a35dcdf8846a88273 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:44:04 +0000 Subject: [PATCH 26/50] lowercase headers --- linkerd/access-log/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs index 6121f8a20f..df3cd76390 100644 --- a/linkerd/access-log/src/lib.rs +++ b/linkerd/access-log/src/lib.rs @@ -94,8 +94,8 @@ where let headers = request.headers(); headers .get("x-b3-traceid") - .or_else(|| headers.get("X-Request-ID")) - .or_else(|| headers.get("X-Amzn-Trace-Id")) + .or_else(|| headers.get("x-request-id")) + .or_else(|| headers.get("x-amzn-trace-id")) .and_then(|x| x.to_str().ok()) .unwrap_or_default() }; From 2b7bd42d3921edb2c010d7a2f606f9c67f56d7fc Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 00:46:47 +0000 Subject: [PATCH 27/50] Only capture time when tracing is enabled --- linkerd/access-log/src/lib.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/linkerd/access-log/src/lib.rs b/linkerd/access-log/src/lib.rs index df3cd76390..b402ee6f8c 100644 --- a/linkerd/access-log/src/lib.rs +++ b/linkerd/access-log/src/lib.rs @@ -100,12 +100,14 @@ where .unwrap_or_default() }; - let timestamp = chrono::Utc::now().format_with_items( - [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), - ); + let now = || { + chrono::Utc::now().format_with_items( + [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), + ) + }; let span = span!(target: TRACE_TARGET, Level::INFO, "http", - %timestamp, + timestamp = %now(), client.addr = %self.client_addr, client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), processing_ns = field::Empty, From 2ac18049f5f15b6ed2ccc6f192e7c945fc83a2a0 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 01:03:48 +0000 Subject: [PATCH 28/50] Make the access log conditional --- linkerd/tracing/src/access_log.rs | 2 +- linkerd/tracing/src/lib.rs | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 89641a6b3c..7f0814fd89 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -53,7 +53,7 @@ pub(super) fn build() -> Option<(Writer, Guard, Directive)> { // always enable the access log spans. let directive = format!("{}=info", TRACE_TARGET) .parse() - .expect("hard-coded filter directive must parse"); + .expect("access logging filter directive must parse"); Some((writer, Guard(guard.into()), directive)) } diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 0d1c37a443..ffdad48aa3 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -20,7 +20,7 @@ use tracing_subscriber::{ }; type Registry = Layered< - access_log::Writer, + Option, Layered, tracing_subscriber::Registry>, >; @@ -46,7 +46,7 @@ enum Inner { Enabled { level: level::Handle, tasks: TaskList, - guard: access_log::Guard, + guard: Option, }, } @@ -114,18 +114,24 @@ impl Settings { .to_uppercase() } - fn mk_registry(&self) -> (Registry, level::Handle, access_log::Guard) { - let filter = { + fn mk_registry(&self) -> (Registry, level::Handle, Option) { + let mut env = { let f = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); EnvFilter::new(f) }; - let (access_log, guard, directive) = - access_log::build().expect("XXX FIXME handle case when access log isn't used"); - let filter = filter.add_directive(directive); + let (access_log, guard) = match access_log::build() { + None => (None, None), + Some((access_log, guard, directive)) => { + env = env.add_directive(directive); + (Some(access_log), Some(guard)) + } + }; - let (filter, level) = reload::Layer::new(filter); - let reg = tracing_subscriber::registry().with(filter).with(access_log); + let (reload_env, level) = reload::Layer::new(env); + let reg = tracing_subscriber::registry() + .with(reload_env) + .with(access_log); (reg, level::Handle::new(level), guard) } From 53e45b80b7c540ab163d1933191f3e74c3b947ba Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 01:11:13 +0000 Subject: [PATCH 29/50] fuzzer deps --- linkerd/addr/fuzz/Cargo.lock | 433 ----------------------- linkerd/app/inbound/fuzz/Cargo.lock | 50 ++- linkerd/dns/fuzz/Cargo.lock | 411 ++------------------- linkerd/proxy/http/fuzz/Cargo.lock | 108 ++---- linkerd/tls/fuzz/Cargo.lock | 279 ++------------- linkerd/transport-header/fuzz/Cargo.lock | 276 ++------------- 6 files changed, 103 insertions(+), 1454 deletions(-) diff --git a/linkerd/addr/fuzz/Cargo.lock b/linkerd/addr/fuzz/Cargo.lock index f4ed36a90a..0801bda819 100644 --- a/linkerd/addr/fuzz/Cargo.lock +++ b/linkerd/addr/fuzz/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - [[package]] name = "ansi_term" version = "0.12.1" @@ -23,29 +17,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "698b65a961a9d730fb45b6b0327e20207810c9f61ee421b082b27ba003f49e2b" -[[package]] -name = "async-trait" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "autocfg" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - [[package]] name = "bitflags" version = "1.2.1" @@ -95,15 +72,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -125,23 +93,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "deflate" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -dependencies = [ - "adler32", - "byteorder", - "gzip-header", -] - -[[package]] -name = "dyn-clone" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" - [[package]] name = "fnv" version = "1.0.7" @@ -242,40 +193,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gzip-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" -dependencies = [ - "crc32fast", -] - -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - [[package]] name = "hermit-abi" version = "0.1.18" @@ -285,15 +202,6 @@ dependencies = [ "libc", ] -[[package]] -name = "html-escape" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ea801a95538fc5f53c836697b3f8b64a9d664c4f0b91efe1fe7c92e4dbcb7" -dependencies = [ - "utf8-width", -] - [[package]] name = "http" version = "0.2.4" @@ -305,62 +213,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" - -[[package]] -name = "httpdate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" - -[[package]] -name = "hyper" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "indexmap" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "instant" version = "0.1.9" @@ -407,22 +259,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "base64", - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "pin-project", - "tracing", - "tracing-subscriber", -] - [[package]] name = "linkerd-addr" version = "0.1.0" @@ -451,10 +287,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "linkerd-errno" -version = "0.1.0" - [[package]] name = "linkerd-error" version = "0.1.0" @@ -462,88 +294,11 @@ dependencies = [ "futures", ] -[[package]] -name = "linkerd-identity" -version = "0.1.0" -dependencies = [ - "linkerd-dns-name", - "ring", - "rustls", - "thiserror", - "tracing", - "untrusted", - "webpki", -] - -[[package]] -name = "linkerd-io" -version = "0.1.0" -dependencies = [ - "async-trait", - "bytes", - "futures", - "linkerd-errno", - "pin-project", - "tokio", - "tokio-rustls", - "tokio-util", -] - -[[package]] -name = "linkerd-metrics" -version = "0.1.0" -dependencies = [ - "deflate", - "http", - "hyper", - "indexmap", - "tracing", -] - -[[package]] -name = "linkerd-proxy-transport" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "libc", - "linkerd-errno", - "linkerd-error", - "linkerd-io", - "linkerd-metrics", - "linkerd-stack", - "pin-project", - "socket2", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - -[[package]] -name = "linkerd-stack" -version = "0.1.0" -dependencies = [ - "dyn-clone", - "futures", - "linkerd-error", - "pin-project", - "tokio", - "tower", - "tracing", -] - [[package]] name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -585,37 +340,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" -[[package]] -name = "mio" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", -] - [[package]] name = "num-integer" version = "0.1.44" @@ -676,26 +400,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "pin-project" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" version = "0.2.6" @@ -787,19 +491,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64", - "log", - "ring", - "sct", - "webpki", -] - [[package]] name = "ryu" version = "1.0.5" @@ -812,16 +503,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "serde" version = "1.0.125" @@ -860,17 +541,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.5.2" @@ -935,48 +605,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83f0c8e7c0addab50b663055baf787d0af7f413a46e6e7fb9559a4e4db7137a5" dependencies = [ "autocfg", - "bytes", - "libc", - "memchr", - "mio", "pin-project-lite", - "tokio-macros", "tracing", ] -[[package]] -name = "tokio-macros" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-trace" version = "0.1.0" @@ -989,47 +621,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "tokio-util" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - [[package]] name = "tracing" version = "0.1.25" @@ -1037,7 +628,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if", - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1102,7 +692,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", @@ -1118,12 +707,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "unicode-xid" version = "0.2.1" @@ -1136,22 +719,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "utf8-width" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" diff --git a/linkerd/app/inbound/fuzz/Cargo.lock b/linkerd/app/inbound/fuzz/Cargo.lock index 4ff77946fa..82043028c3 100644 --- a/linkerd/app/inbound/fuzz/Cargo.lock +++ b/linkerd/app/inbound/fuzz/Cargo.lock @@ -239,9 +239,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -254,9 +254,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -264,15 +264,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -281,16 +281,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -299,22 +300,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -592,16 +594,15 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" name = "linkerd-access-log" version = "0.1.0" dependencies = [ - "base64", "chrono", "futures", "http", "linkerd-identity", "linkerd-proxy-transport", "linkerd-stack", + "linkerd-tracing", "pin-project", "tracing", - "tracing-subscriber", ] [[package]] @@ -619,6 +620,7 @@ version = "0.1.0" dependencies = [ "bytes", "futures", + "html-escape", "http", "http-body", "hyper", @@ -669,6 +671,7 @@ dependencies = [ "linkerd2-proxy-api", "pin-project", "regex", + "serde_json", "thiserror", "tokio", "tokio-stream", @@ -1311,13 +1314,7 @@ dependencies = [ name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -2235,7 +2232,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", diff --git a/linkerd/dns/fuzz/Cargo.lock b/linkerd/dns/fuzz/Cargo.lock index 0a4008fe65..0a29cf898f 100644 --- a/linkerd/dns/fuzz/Cargo.lock +++ b/linkerd/dns/fuzz/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - [[package]] name = "ansi_term" version = "0.12.1" @@ -40,12 +34,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - [[package]] name = "bitflags" version = "1.2.1" @@ -95,15 +83,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -131,23 +110,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" -[[package]] -name = "deflate" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -dependencies = [ - "adler32", - "byteorder", - "gzip-header", -] - -[[package]] -name = "dyn-clone" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" - [[package]] name = "enum-as-inner" version = "0.3.3" @@ -160,12 +122,6 @@ dependencies = [ "syn", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "form_urlencoded" version = "1.0.1" @@ -178,9 +134,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -193,9 +149,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -203,15 +159,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -220,16 +176,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -238,22 +195,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -279,40 +237,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gzip-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" -dependencies = [ - "crc32fast", -] - -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - [[package]] name = "heck" version = "0.3.2" @@ -342,72 +266,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "html-escape" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ea801a95538fc5f53c836697b3f8b64a9d664c4f0b91efe1fe7c92e4dbcb7" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "http" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" - -[[package]] -name = "httpdate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" - -[[package]] -name = "hyper" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "idna" version = "0.2.3" @@ -419,16 +277,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "instant" version = "0.1.9" @@ -499,22 +347,6 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "base64", - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "pin-project", - "tracing", - "tracing-subscriber", -] - [[package]] name = "linkerd-dns" version = "0.1.0" @@ -549,10 +381,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "linkerd-errno" -version = "0.1.0" - [[package]] name = "linkerd-error" version = "0.1.0" @@ -560,88 +388,11 @@ dependencies = [ "futures", ] -[[package]] -name = "linkerd-identity" -version = "0.1.0" -dependencies = [ - "linkerd-dns-name", - "ring", - "rustls", - "thiserror", - "tracing", - "untrusted", - "webpki", -] - -[[package]] -name = "linkerd-io" -version = "0.1.0" -dependencies = [ - "async-trait", - "bytes", - "futures", - "linkerd-errno", - "pin-project", - "tokio", - "tokio-rustls", - "tokio-util", -] - -[[package]] -name = "linkerd-metrics" -version = "0.1.0" -dependencies = [ - "deflate", - "http", - "hyper", - "indexmap", - "tracing", -] - -[[package]] -name = "linkerd-proxy-transport" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "libc", - "linkerd-errno", - "linkerd-error", - "linkerd-io", - "linkerd-metrics", - "linkerd-stack", - "pin-project", - "socket2", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - -[[package]] -name = "linkerd-stack" -version = "0.1.0" -dependencies = [ - "dyn-clone", - "futures", - "linkerd-error", - "pin-project", - "tokio", - "tower", - "tracing", -] - [[package]] name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -974,19 +725,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64", - "log", - "ring", - "sct", - "webpki", -] - [[package]] name = "ryu" version = "1.0.5" @@ -999,16 +737,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "serde" version = "1.0.125" @@ -1142,43 +870,9 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "tokio-macros", "tracing", ] -[[package]] -name = "tokio-macros" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c49e3df43841dafb86046472506755d8501c5615673955f6aa17181125d13c37" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-trace" version = "0.1.0" @@ -1191,47 +885,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "tokio-util" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1caa0b0c8d94a049db56b5acf8cba99dc0623aab1b26d5b5f5e2d945846b3592" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0aa6dfc29148c3826708dabbfa83c121eeb84df4d1468220825e3a33651687" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - [[package]] name = "tracing" version = "0.1.25" @@ -1239,7 +892,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if", - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1304,7 +956,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", @@ -1363,12 +1014,6 @@ dependencies = [ "trust-dns-proto", ] -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "unicode-bidi" version = "0.3.5" @@ -1417,22 +1062,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf8-width" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" diff --git a/linkerd/proxy/http/fuzz/Cargo.lock b/linkerd/proxy/http/fuzz/Cargo.lock index 4851236293..29021f30df 100644 --- a/linkerd/proxy/http/fuzz/Cargo.lock +++ b/linkerd/proxy/http/fuzz/Cargo.lock @@ -8,15 +8,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "arbitrary" version = "1.0.0" @@ -171,9 +162,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "futures" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -186,9 +177,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -196,15 +187,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -213,16 +204,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -231,22 +223,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -315,15 +308,6 @@ dependencies = [ "libc", ] -[[package]] -name = "html-escape" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ea801a95538fc5f53c836697b3f8b64a9d664c4f0b91efe1fe7c92e4dbcb7" -dependencies = [ - "utf8-width", -] - [[package]] name = "http" version = "0.2.4" @@ -450,22 +434,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "base64", - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "pin-project", - "tracing", - "tracing-subscriber", -] - [[package]] name = "linkerd-detect" version = "0.1.0" @@ -481,15 +449,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "linkerd-dns-name" -version = "0.1.0" -dependencies = [ - "thiserror", - "untrusted", - "webpki", -] - [[package]] name = "linkerd-drain" version = "0.1.0" @@ -535,19 +494,6 @@ dependencies = [ "tower", ] -[[package]] -name = "linkerd-identity" -version = "0.1.0" -dependencies = [ - "linkerd-dns-name", - "ring", - "rustls", - "thiserror", - "tracing", - "untrusted", - "webpki", -] - [[package]] name = "linkerd-io" version = "0.1.0" @@ -667,13 +613,7 @@ dependencies = [ name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -1317,8 +1257,6 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ - "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", @@ -1352,12 +1290,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "utf8-width" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" - [[package]] name = "want" version = "0.3.0" diff --git a/linkerd/tls/fuzz/Cargo.lock b/linkerd/tls/fuzz/Cargo.lock index 8868966fb8..97468c5405 100644 --- a/linkerd/tls/fuzz/Cargo.lock +++ b/linkerd/tls/fuzz/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - [[package]] name = "ansi_term" version = "0.12.1" @@ -95,15 +89,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -125,34 +110,17 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "deflate" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -dependencies = [ - "adler32", - "byteorder", - "gzip-header", -] - [[package]] name = "dyn-clone" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "futures" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -165,9 +133,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -175,15 +143,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -192,16 +160,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -210,22 +179,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -240,40 +210,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gzip-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" -dependencies = [ - "crc32fast", -] - -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - [[package]] name = "hermit-abi" version = "0.1.18" @@ -283,82 +219,6 @@ dependencies = [ "libc", ] -[[package]] -name = "html-escape" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ea801a95538fc5f53c836697b3f8b64a9d664c4f0b91efe1fe7c92e4dbcb7" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "http" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" - -[[package]] -name = "httpdate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" - -[[package]] -name = "hyper" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "indexmap" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "instant" version = "0.1.9" @@ -405,22 +265,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "base64", - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "pin-project", - "tracing", - "tracing-subscriber", -] - [[package]] name = "linkerd-conditional" version = "0.1.0" @@ -472,37 +316,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "linkerd-metrics" -version = "0.1.0" -dependencies = [ - "deflate", - "http", - "hyper", - "indexmap", - "tracing", -] - -[[package]] -name = "linkerd-proxy-transport" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "libc", - "linkerd-errno", - "linkerd-error", - "linkerd-io", - "linkerd-metrics", - "linkerd-stack", - "pin-project", - "socket2", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - [[package]] name = "linkerd-stack" version = "0.1.0" @@ -552,13 +365,7 @@ dependencies = [ name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -875,17 +682,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.5.2" @@ -981,17 +777,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "tokio-stream" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-trace" version = "0.1.0" @@ -1027,7 +812,6 @@ dependencies = [ "futures-core", "futures-util", "pin-project", - "tokio", "tower-layer", "tower-service", "tracing", @@ -1117,7 +901,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", @@ -1133,12 +916,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "unicode-xid" version = "0.2.1" @@ -1151,22 +928,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "utf8-width" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" diff --git a/linkerd/transport-header/fuzz/Cargo.lock b/linkerd/transport-header/fuzz/Cargo.lock index 98386a0d63..b786c94882 100644 --- a/linkerd/transport-header/fuzz/Cargo.lock +++ b/linkerd/transport-header/fuzz/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - [[package]] name = "ansi_term" version = "0.12.1" @@ -104,15 +98,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -134,17 +119,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "deflate" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -dependencies = [ - "adler32", - "byteorder", - "gzip-header", -] - [[package]] name = "derive_arbitrary" version = "1.0.0" @@ -174,17 +148,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "futures" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -197,9 +165,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -207,15 +175,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -224,16 +192,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -242,22 +211,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -283,34 +253,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gzip-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" -dependencies = [ - "crc32fast", -] - -[[package]] -name = "h2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825343c4eef0b63f541f8903f395dc5beb362a979b5799a84062527ef1e37726" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.9.1" @@ -335,72 +277,6 @@ dependencies = [ "libc", ] -[[package]] -name = "html-escape" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ea801a95538fc5f53c836697b3f8b64a9d664c4f0b91efe1fe7c92e4dbcb7" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "http" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60daa14be0e0786db0f03a9e57cb404c9d756eed2b6c62b9ea98ec5743ec75a9" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" - -[[package]] -name = "httpdate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9" - -[[package]] -name = "hyper" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "indexmap" version = "1.6.2" @@ -466,22 +342,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "base64", - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "pin-project", - "tracing", - "tracing-subscriber", -] - [[package]] name = "linkerd-dns-name" version = "0.1.0" @@ -502,19 +362,6 @@ dependencies = [ "futures", ] -[[package]] -name = "linkerd-identity" -version = "0.1.0" -dependencies = [ - "linkerd-dns-name", - "ring", - "rustls", - "thiserror", - "tracing", - "untrusted", - "webpki", -] - [[package]] name = "linkerd-io" version = "0.1.0" @@ -529,37 +376,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "linkerd-metrics" -version = "0.1.0" -dependencies = [ - "deflate", - "http", - "hyper", - "indexmap", - "tracing", -] - -[[package]] -name = "linkerd-proxy-transport" -version = "0.1.0" -dependencies = [ - "bytes", - "futures", - "libc", - "linkerd-errno", - "linkerd-error", - "linkerd-io", - "linkerd-metrics", - "linkerd-stack", - "pin-project", - "socket2", - "tokio", - "tokio-stream", - "tower", - "tracing", -] - [[package]] name = "linkerd-stack" version = "0.1.0" @@ -577,13 +393,7 @@ dependencies = [ name = "linkerd-tracing" version = "0.1.0" dependencies = [ - "bytes", - "html-escape", - "http", - "hyper", - "linkerd-access-log", "linkerd-error", - "serde_json", "tokio", "tokio-trace", "tracing", @@ -1062,17 +872,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.5.2" @@ -1187,17 +986,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "tokio-stream" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8864d706fdb3cc0843a49647ac892720dac98a6eeb818b77190592cf4994066" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-trace" version = "0.1.0" @@ -1233,7 +1021,6 @@ dependencies = [ "futures-core", "futures-util", "pin-project", - "tokio", "tower-layer", "tower-service", "tracing", @@ -1323,7 +1110,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "parking_lot", @@ -1339,12 +1125,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - [[package]] name = "unicode-segmentation" version = "1.7.1" @@ -1363,22 +1143,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "utf8-width" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" From b6005d92bfbc2c6a4b7437380f8c8970d5b32333 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 01:16:11 +0000 Subject: [PATCH 30/50] Only app::inbound need depend on access-log --- Cargo.lock | 2 +- linkerd/app/core/Cargo.toml | 1 - linkerd/app/core/src/lib.rs | 1 - linkerd/app/inbound/Cargo.toml | 1 + linkerd/app/inbound/fuzz/Cargo.lock | 2 +- linkerd/app/inbound/src/http/mod.rs | 2 +- 6 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b12978e0d7..5ad030a3bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -693,7 +693,6 @@ dependencies = [ "hyper", "indexmap", "ipnet", - "linkerd-access-log", "linkerd-addr", "linkerd-cache", "linkerd-concurrency-limit", @@ -778,6 +777,7 @@ dependencies = [ "hyper", "indexmap", "libfuzzer-sys", + "linkerd-access-log", "linkerd-app-core", "linkerd-app-test", "linkerd-io", diff --git a/linkerd/app/core/Cargo.toml b/linkerd/app/core/Cargo.toml index f1adcd3b75..669a149b77 100644 --- a/linkerd/app/core/Cargo.toml +++ b/linkerd/app/core/Cargo.toml @@ -21,7 +21,6 @@ hyper = { version = "0.14.2", features = ["http1", "http2"] } futures = "0.3.15" indexmap = "1.0" ipnet = "2.0" -linkerd-access-log = { path = "../../access-log" } linkerd-addr = { path = "../../addr" } linkerd-cache = { path = "../../cache" } linkerd-concurrency-limit = { path = "../../concurrency-limit" } diff --git a/linkerd/app/core/src/lib.rs b/linkerd/app/core/src/lib.rs index 29e1c81d44..5250aace98 100644 --- a/linkerd/app/core/src/lib.rs +++ b/linkerd/app/core/src/lib.rs @@ -11,7 +11,6 @@ #![forbid(unsafe_code)] #![allow(clippy::inconsistent_struct_constructor)] -pub use linkerd_access_log as access_log; pub use linkerd_addr::{self as addr, Addr, NameAddr}; pub use linkerd_cache as cache; pub use linkerd_conditional::Conditional; diff --git a/linkerd/app/inbound/Cargo.toml b/linkerd/app/inbound/Cargo.toml index a310b9f225..11b8cb3bc0 100644 --- a/linkerd/app/inbound/Cargo.toml +++ b/linkerd/app/inbound/Cargo.toml @@ -14,6 +14,7 @@ bytes = "1" http = "0.2" futures = "0.3.15" indexmap = "1.0" +linkerd-access-log = { path = "../../access-log" } linkerd-app-core = { path = "../core" } thiserror = "1.0" tokio = { version = "1", features = ["sync"] } diff --git a/linkerd/app/inbound/fuzz/Cargo.lock b/linkerd/app/inbound/fuzz/Cargo.lock index 82043028c3..2bc4dfa5b4 100644 --- a/linkerd/app/inbound/fuzz/Cargo.lock +++ b/linkerd/app/inbound/fuzz/Cargo.lock @@ -626,7 +626,6 @@ dependencies = [ "hyper", "indexmap", "ipnet", - "linkerd-access-log", "linkerd-addr", "linkerd-cache", "linkerd-concurrency-limit", @@ -691,6 +690,7 @@ dependencies = [ "hyper", "indexmap", "libfuzzer-sys", + "linkerd-access-log", "linkerd-app-core", "linkerd-app-test", "thiserror", diff --git a/linkerd/app/inbound/src/http/mod.rs b/linkerd/app/inbound/src/http/mod.rs index d5200c8ae2..d31c8910fa 100644 --- a/linkerd/app/inbound/src/http/mod.rs +++ b/linkerd/app/inbound/src/http/mod.rs @@ -8,12 +8,12 @@ use crate::{ target::{self, HttpAccept, HttpEndpoint, Logical, RequestTarget, Target, TcpEndpoint}, Inbound, }; +use linkerd_access_log::NewAccessLog; pub use linkerd_app_core::proxy::http::{ normalize_uri, strip_header, uri, BoxBody, BoxResponse, DetectHttp, Request, Response, Retain, Version, }; use linkerd_app_core::{ - access_log::NewAccessLog, classify, config::{ProxyConfig, ServerConfig}, dst, errors, http_tracing, identity, io, profiles, From bf48a56ee19a45c2c2edb48f87b0d9b1d8162102 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 01:18:00 +0000 Subject: [PATCH 31/50] Rename the module to linkerd-http-access-log --- Cargo.lock | 32 +++++++++---------- Cargo.toml | 2 +- linkerd/app/inbound/Cargo.toml | 2 +- linkerd/app/inbound/fuzz/Cargo.lock | 32 +++++++++---------- linkerd/app/inbound/src/http/mod.rs | 2 +- .../Cargo.toml | 2 +- .../src/lib.rs | 0 7 files changed, 36 insertions(+), 36 deletions(-) rename linkerd/{access-log => http-access-log}/Cargo.toml (92%) rename linkerd/{access-log => http-access-log}/src/lib.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 5ad030a3bd..ad16bbacb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -635,21 +635,6 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "linkerd-tracing", - "pin-project", - "tracing", -] - [[package]] name = "linkerd-addr" version = "0.1.0" @@ -777,9 +762,9 @@ dependencies = [ "hyper", "indexmap", "libfuzzer-sys", - "linkerd-access-log", "linkerd-app-core", "linkerd-app-test", + "linkerd-http-access-log", "linkerd-io", "linkerd-tracing", "thiserror", @@ -1002,6 +987,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "linkerd-http-access-log" +version = "0.1.0" +dependencies = [ + "chrono", + "futures", + "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", + "linkerd-tracing", + "pin-project", + "tracing", +] + [[package]] name = "linkerd-http-box" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 5c8427990c..44da0f06f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,6 @@ resolver = "2" members = [ "hyper-balance", - "linkerd/access-log", "linkerd/addr", "linkerd/app/core", "linkerd/app/gateway", @@ -28,6 +27,7 @@ members = [ "linkerd/error-metrics", "linkerd/error-respond", "linkerd/exp-backoff", + "linkerd/http-access-log", "linkerd/http-box", "linkerd/http-classify", "linkerd/http-metrics", diff --git a/linkerd/app/inbound/Cargo.toml b/linkerd/app/inbound/Cargo.toml index 11b8cb3bc0..2cb2a492ec 100644 --- a/linkerd/app/inbound/Cargo.toml +++ b/linkerd/app/inbound/Cargo.toml @@ -14,8 +14,8 @@ bytes = "1" http = "0.2" futures = "0.3.15" indexmap = "1.0" -linkerd-access-log = { path = "../../access-log" } linkerd-app-core = { path = "../core" } +linkerd-http-access-log = { path = "../../http-access-log" } thiserror = "1.0" tokio = { version = "1", features = ["sync"] } tower = { version = "0.4.7", features = ["util"] } diff --git a/linkerd/app/inbound/fuzz/Cargo.lock b/linkerd/app/inbound/fuzz/Cargo.lock index 2bc4dfa5b4..39b5650b24 100644 --- a/linkerd/app/inbound/fuzz/Cargo.lock +++ b/linkerd/app/inbound/fuzz/Cargo.lock @@ -590,21 +590,6 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" -[[package]] -name = "linkerd-access-log" -version = "0.1.0" -dependencies = [ - "chrono", - "futures", - "http", - "linkerd-identity", - "linkerd-proxy-transport", - "linkerd-stack", - "linkerd-tracing", - "pin-project", - "tracing", -] - [[package]] name = "linkerd-addr" version = "0.1.0" @@ -690,9 +675,9 @@ dependencies = [ "hyper", "indexmap", "libfuzzer-sys", - "linkerd-access-log", "linkerd-app-core", "linkerd-app-test", + "linkerd-http-access-log", "thiserror", "tokio", "tower", @@ -870,6 +855,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "linkerd-http-access-log" +version = "0.1.0" +dependencies = [ + "chrono", + "futures", + "http", + "linkerd-identity", + "linkerd-proxy-transport", + "linkerd-stack", + "linkerd-tracing", + "pin-project", + "tracing", +] + [[package]] name = "linkerd-http-box" version = "0.1.0" diff --git a/linkerd/app/inbound/src/http/mod.rs b/linkerd/app/inbound/src/http/mod.rs index d31c8910fa..c70ad56c06 100644 --- a/linkerd/app/inbound/src/http/mod.rs +++ b/linkerd/app/inbound/src/http/mod.rs @@ -8,7 +8,6 @@ use crate::{ target::{self, HttpAccept, HttpEndpoint, Logical, RequestTarget, Target, TcpEndpoint}, Inbound, }; -use linkerd_access_log::NewAccessLog; pub use linkerd_app_core::proxy::http::{ normalize_uri, strip_header, uri, BoxBody, BoxResponse, DetectHttp, Request, Response, Retain, Version, @@ -23,6 +22,7 @@ use linkerd_app_core::{ transport::{ClientAddr, Remote}, Error, }; +use linkerd_http_access_log::NewAccessLog; use tracing::debug_span; impl Inbound { diff --git a/linkerd/access-log/Cargo.toml b/linkerd/http-access-log/Cargo.toml similarity index 92% rename from linkerd/access-log/Cargo.toml rename to linkerd/http-access-log/Cargo.toml index 83a9ae4db1..eeaabd5dc2 100644 --- a/linkerd/access-log/Cargo.toml +++ b/linkerd/http-access-log/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "linkerd-access-log" +name = "linkerd-http-access-log" version = "0.1.0" authors = ["Linkerd Developers "] license = "Apache-2.0" diff --git a/linkerd/access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs similarity index 100% rename from linkerd/access-log/src/lib.rs rename to linkerd/http-access-log/src/lib.rs From da3d1ae540355a488eaed52d5b775e4f89dcace5 Mon Sep 17 00:00:00 2001 From: Oliver Gould Date: Thu, 3 Jun 2021 15:49:30 +0000 Subject: [PATCH 32/50] forbid unsafe code --- linkerd/http-access-log/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index b402ee6f8c..49240a74ec 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -1,4 +1,5 @@ #![deny(warnings, rust_2018_idioms)] +#![forbid(unsafe_code)] use futures::TryFuture; use linkerd_identity as identity; From 9e5ecf6329c34c5a24c52bcc2d17698d5da4cf9b Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 08:38:45 -0700 Subject: [PATCH 33/50] wip plf integration --- Cargo.lock | 5 ++-- linkerd/app/inbound/src/http/server.rs | 5 ++-- linkerd/http-access-log/Cargo.toml | 1 + linkerd/http-access-log/src/lib.rs | 10 ++++--- linkerd/tls/src/server/mod.rs | 11 ++++++++ linkerd/tracing/Cargo.toml | 4 +-- linkerd/tracing/src/access_log.rs | 22 ++++++++++----- linkerd/tracing/src/lib.rs | 37 ++++++++++++++------------ 8 files changed, 63 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbd47301ac..51f6fde897 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -985,6 +985,7 @@ dependencies = [ "linkerd-identity", "linkerd-proxy-transport", "linkerd-stack", + "linkerd-tls", "linkerd-tracing", "pin-project", "tracing", @@ -2474,9 +2475,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd0568dbfe3baf7048b7908d2b32bca0d81cd56bec6d2a8f894b01d74f86be3" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ "ansi_term", "lazy_static", diff --git a/linkerd/app/inbound/src/http/server.rs b/linkerd/app/inbound/src/http/server.rs index cb2d2c6134..f976513736 100644 --- a/linkerd/app/inbound/src/http/server.rs +++ b/linkerd/app/inbound/src/http/server.rs @@ -11,7 +11,7 @@ use linkerd_app_core::{ proxy::http, svc::{self, ExtractParam, Param}, tls, - transport::OrigDstAddr, + transport::{ClientAddr, OrigDstAddr, Remote}, Error, Result, }; use linkerd_http_access_log::NewAccessLog; @@ -27,7 +27,8 @@ impl Inbound { + Param + Param + Param - + Param, + + Param + + Param>, T: Clone + Send + Unpin + 'static, I: io::AsyncRead + io::AsyncWrite + io::PeerAddr + Send + Unpin + 'static, H: svc::NewService + Clone + Send + Sync + Unpin + 'static, diff --git a/linkerd/http-access-log/Cargo.toml b/linkerd/http-access-log/Cargo.toml index eeaabd5dc2..d3eb235970 100644 --- a/linkerd/http-access-log/Cargo.toml +++ b/linkerd/http-access-log/Cargo.toml @@ -13,6 +13,7 @@ http = "0.2" pin-project = "1" linkerd-stack = { path = "../stack" } linkerd-identity = { path = "../identity" } +linkerd-tls = { path = "../tls" } linkerd-proxy-transport = { path = "../proxy/transport" } linkerd-tracing = { path = "../tracing" } tracing = "0.1.19" diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index 49240a74ec..2b074d8679 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -5,6 +5,7 @@ use futures::TryFuture; use linkerd_identity as identity; use linkerd_proxy_transport::{ClientAddr, Remote}; use linkerd_stack as svc; +use linkerd_tls as tls; use linkerd_tracing::access_log::TRACE_TARGET; use pin_project::pin_project; use std::{ @@ -52,14 +53,17 @@ impl NewAccessLog { impl NewService for NewAccessLog where - T: Param> + Param>, + T: Param + Param>, N: NewService, { type Service = AccessLogContext; - fn new_service(&mut self, target: T) -> Self::Service { + fn new_service(&self, target: T) -> Self::Service { let Remote(ClientAddr(client_addr)) = target.param(); - let client_id = target.param(); + let tls: tls::ConditionalServerTls = target.param(); + let client_id = tls + .value() + .and_then(|tls| tls.client_id().map(|tls::ClientId(name)| name.clone())); let inner = self.inner.new_service(target); AccessLogContext { inner, diff --git a/linkerd/tls/src/server/mod.rs b/linkerd/tls/src/server/mod.rs index 437ca7d0cd..ab5f702982 100644 --- a/linkerd/tls/src/server/mod.rs +++ b/linkerd/tls/src/server/mod.rs @@ -359,6 +359,17 @@ impl fmt::Display for NoServerTls { } } +// === impl ServerTls === + +impl ServerTls { + pub fn client_id(&self) -> Option<&ClientId> { + match self { + ServerTls::Established { ref client_id, .. } => client_id.as_ref(), + _ => None, + } + } +} + #[cfg(test)] mod tests { use io::AsyncWriteExt; diff --git a/linkerd/tracing/Cargo.toml b/linkerd/tracing/Cargo.toml index 417c10510d..b8cca65aa3 100644 --- a/linkerd/tracing/Cargo.toml +++ b/linkerd/tracing/Cargo.toml @@ -18,6 +18,6 @@ tracing-appender = "0.1.2" tracing-log = "0.1.2" [dependencies.tracing-subscriber] -version = "0.2.24" +version = "0.2.25" default-features = false -features = ["env-filter", "fmt", "smallvec", "tracing-log", "json", "parking_lot"] +features = ["env-filter", "fmt", "smallvec", "tracing-log", "json", "parking_lot", "registry"] diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 7f0814fd89..4328cf7dd9 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,15 +1,14 @@ use std::{io::Write, marker::PhantomData, path::PathBuf, sync::Arc}; -use tracing::{Id, Metadata, Subscriber}; +use tracing::{Id, Level, Metadata, Subscriber}; use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; -use tracing_subscriber::filter::Directive; use tracing_subscriber::{ + filter::{Directive, FilterFn, Filtered}, fmt::{ format::{DefaultFields, JsonFields}, FormatFields, FormattedFields, MakeWriter, }, - layer::Context, + layer::{Context, Layer}, registry::LookupSpan, - Layer, }; const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; @@ -19,12 +18,17 @@ pub const TRACE_TARGET: &str = "_access_log"; #[derive(Clone, Debug)] pub struct Guard(Arc); +pub type AccessLogLayer = Filtered; + pub(super) struct Writer { make_writer: NonBlocking, _f: PhantomData, } -pub(super) fn build() -> Option<(Writer, Guard, Directive)> { +pub(super) fn build() -> Option<(AccessLogLayer, Guard, Directive)> +where + S: Subscriber + for<'span> LookupSpan<'span>, +{ // Create the access log file, or open it in append-only mode if // it already exists. let file = { @@ -47,7 +51,13 @@ pub(super) fn build() -> Option<(Writer, Guard, Directive)> { // build the access log layer. eprintln!("Writing access log to {:?}", file); let (non_blocking, guard) = tracing_appender::non_blocking(file); - let writer = Writer::new(non_blocking); + let writer = Writer::new(non_blocking).with_filter( + FilterFn::new( + (|meta| meta.level() == &Level::INFO && meta.target().starts_with(TRACE_TARGET)) + as fn(&Metadata<'_>) -> bool, + ) + .with_max_level_hint(Level::INFO), + ); // Also, ensure that the `tracing` filter configuration will // always enable the access log spans. diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 9f3de5cb78..36d3b50a82 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -12,10 +12,8 @@ use std::str; use tracing::Dispatch; use tracing_subscriber::{fmt::format, layer::Layered, prelude::*, reload, EnvFilter}; -type Registry = Layered< - Option, - Layered, tracing_subscriber::Registry>, ->; +type Registry = + Layered, tracing_subscriber::Registry>; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; @@ -103,28 +101,33 @@ impl Settings { .to_uppercase() } - fn mk_registry(&self) -> (Registry, level::Handle, Option) { + fn mk_registry( + &self, + ) -> ( + Registry, + level::Handle, + Option<(access_log::AccessLogLayer, access_log::Guard)>, + ) { let mut env = { let f = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); EnvFilter::new(f) }; - let (access_log, guard) = match access_log::build() { - None => (None, None), - Some((access_log, guard, directive)) => { - env = env.add_directive(directive); - (Some(access_log), Some(guard)) - } - }; + let access_log = access_log::build().map(|(access_log, guard, directive)| { + env = env.add_directive(directive); + (access_log, guard) + }); let (reload_env, level) = reload::Layer::new(env); - let reg = tracing_subscriber::registry() - .with(reload_env) - .with(access_log); - (reg, level::Handle::new(level), guard) + let reg = tracing_subscriber::registry().with(reload_env); + (reg, level::Handle::new(level), access_log) } - fn mk_json(&self, registry: Registry) -> Dispatch { + fn mk_json( + &self, + registry: Registry, + access_log: Option>, + ) -> Dispatch { let fmt = tracing_subscriber::fmt::format() .with_timer(Uptime::starting_now()) .with_thread_ids(!self.is_test) From 219b220dc9ba5e0d018d92ad11189c6673432250 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 09:04:15 -0700 Subject: [PATCH 34/50] tracing: simplify subscriber construction with `Box`ed layers Currently, the way the `tracing` subscriber is constructed is somewhat convoluted, due to potentially constructing formatting layers with different types (either plaintext logging or JSON). Because of this, we can't simply have methods that return the `fmt` layer. Instead, we have to pass the `Registry` into the methods that construct the `fmt` layers and return a type-erased `Dispatch` after adding the `fmt` layers. This is kind of not great. In particular, it makes adding additional layers difficult, such as access logging (#601) and (eventually) `tokio-console` support. This branch refactors the subscriber construction to use the (recently-added) `impl Layer for Box>` in `tracing-subscriber`. Now, we can erase the types of the JSON and plaintext `fmt` layers and return them from the methods that construct them, and layer them onto the `Registry` in `tracing::Settings::build()`. This makes the `tracing` setup significantly easier, and will enable changes I want to make in #601. Boxing these layers does add slight overhead of dynamic dispatch + a pointer dereference. However, I doubt this has a huge performance impact in practice... --- linkerd/tracing/src/lib.rs | 49 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 755a24ef1b..77a6605f42 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -8,11 +8,8 @@ mod uptime; use self::uptime::Uptime; use linkerd_error::Error; use std::{env, str}; -use tracing::Dispatch; -use tracing_subscriber::{fmt::format, layer::Layered, prelude::*, reload, EnvFilter}; - -type Registry = - Layered, tracing_subscriber::Registry>; +use tracing::{Dispatch, Subscriber}; +use tracing_subscriber::{fmt::format, prelude::*, registry::LookupSpan, reload, EnvFilter, Layer}; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; @@ -94,14 +91,11 @@ impl Settings { .to_uppercase() } - fn mk_registry(&self) -> (Registry, level::Handle) { - let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); - let (filter, level) = reload::Layer::new(EnvFilter::new(log_level)); - let reg = tracing_subscriber::registry().with(filter); - (reg, level::Handle::new(level)) - } - - fn mk_json(&self, registry: Registry) -> Dispatch { + fn mk_json(&self) -> Box + Send + Sync + 'static> + where + S: Subscriber + for<'span> LookupSpan<'span>, + S: Send + Sync, + { let fmt = tracing_subscriber::fmt::format() .with_timer(Uptime::starting_now()) .with_thread_ids(!self.is_test) @@ -121,32 +115,43 @@ impl Settings { .fmt_fields(format::JsonFields::default()); if self.is_test { - registry.with(fmt.with_test_writer()).into() + Box::new(fmt.with_test_writer()) } else { - registry.with(fmt).into() + Box::new(fmt) } } - fn mk_plain(&self, registry: Registry) -> Dispatch { + fn mk_plain(&self) -> Box + Send + Sync + 'static> + where + S: Subscriber + for<'span> LookupSpan<'span>, + S: Send + Sync, + { let fmt = tracing_subscriber::fmt::format() .with_timer(Uptime::starting_now()) .with_thread_ids(!self.is_test); let fmt = tracing_subscriber::fmt::layer().event_format(fmt); if self.is_test { - registry.with(fmt.with_test_writer()).into() + Box::new(fmt.with_test_writer()) } else { - registry.with(fmt).into() + Box::new(fmt) } } pub fn build(self) -> (Dispatch, Handle) { - let (registry, level) = self.mk_registry(); + let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); + let (filter, level) = reload::Layer::new(EnvFilter::new(log_level)); + let level = level::Handle::new(level); - let dispatch = match self.format().as_ref() { - "JSON" => self.mk_json(registry), - _ => self.mk_plain(registry), + let logger = match self.format().as_ref() { + "JSON" => self.mk_json(), + _ => self.mk_plain(), }; + let dispatch = tracing_subscriber::registry() + .with(filter) + .with(logger) + .into(); + (dispatch, Handle(Some(level))) } } From 00d56edac3af73e865faf2cbd3ac2363cb1b0c0b Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 09:26:56 -0700 Subject: [PATCH 35/50] finish wiring it up Signed-off-by: Eliza Weisman --- linkerd/tracing/src/access_log.rs | 2 +- linkerd/tracing/src/lib.rs | 30 ++++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 4328cf7dd9..72048415ab 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -18,7 +18,7 @@ pub const TRACE_TARGET: &str = "_access_log"; #[derive(Clone, Debug)] pub struct Guard(Arc); -pub type AccessLogLayer = Filtered; +pub(super) type AccessLogLayer = Filtered; pub(super) struct Writer { make_writer: NonBlocking, diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index a132b7d440..bb03bf7b1b 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -152,7 +152,16 @@ impl Settings { pub fn build(self) -> (Dispatch, Handle) { let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); - let (filter, level) = reload::Layer::new(EnvFilter::new(log_level)); + + let mut filter = EnvFilter::new(log_level); + let (access_log, guard) = match access_log::build() { + Some((access_log, guard, directive)) => { + filter = filter.add_directive(directive); + (Some(access_log), Some(guard)) + } + None => (None, None), + }; + let (filter, level) = reload::Layer::new(filter); let level = level::Handle::new(level); let logger = match self.format().as_ref() { @@ -160,12 +169,21 @@ impl Settings { _ => self.mk_plain(), }; - let dispatch = tracing_subscriber::registry() - .with(filter) - .with(logger) - .into(); + let handle = Handle(Some(Inner { level, guard })); + + let has_access_log = access_log.is_some(); + let registry = tracing_subscriber::registry().with(filter).with(access_log); + let dispatch = if has_access_log { + registry + .with(logger.with_filter(FilterFn::new(|meta| { + !meta.target().starts_with(access_log::TRACE_TARGET) + }))) + .into() + } else { + registry.with(logger).into() + }; - (dispatch, Handle(Some(level))) + (dispatch, handle) } } // === impl Handle === From f69fbdfaf403f23bd4b166702ebd4d470b25886b Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 09:28:47 -0700 Subject: [PATCH 36/50] ...actually we should probably always filter out Signed-off-by: Eliza Weisman --- linkerd/tracing/src/lib.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index bb03bf7b1b..e63f48a6bf 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -168,20 +168,17 @@ impl Settings { "JSON" => self.mk_json(), _ => self.mk_plain(), }; + let logger = logger.with_filter(FilterFn::new(|meta| { + !meta.target().starts_with(access_log::TRACE_TARGET) + })); let handle = Handle(Some(Inner { level, guard })); - let has_access_log = access_log.is_some(); - let registry = tracing_subscriber::registry().with(filter).with(access_log); - let dispatch = if has_access_log { - registry - .with(logger.with_filter(FilterFn::new(|meta| { - !meta.target().starts_with(access_log::TRACE_TARGET) - }))) - .into() - } else { - registry.with(logger).into() - }; + let dispatch = tracing_subscriber::registry() + .with(filter) + .with(access_log) + .with(logger) + .into(); (dispatch, handle) } From af72a6960d965117f30872b9979579ee8576d347 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 15:03:47 -0700 Subject: [PATCH 37/50] allow enabling the access log in tests Signed-off-by: Eliza Weisman --- linkerd/http-retry/src/lib.rs | 2 +- linkerd/tracing/src/test.rs | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/linkerd/http-retry/src/lib.rs b/linkerd/http-retry/src/lib.rs index f2d6471d48..cc91385676 100644 --- a/linkerd/http-retry/src/lib.rs +++ b/linkerd/http-retry/src/lib.rs @@ -881,7 +881,7 @@ mod tests { tx: Tx(tx), initial, replay, - _trace: linkerd_tracing::test::with_default_filter("linkerd_http_retry=debug"), + _trace: linkerd_tracing::test::with_default_filter("linkerd_http_retry=debug").0, } } } diff --git a/linkerd/tracing/src/test.rs b/linkerd/tracing/src/test.rs index 8364348794..41969fa4a6 100644 --- a/linkerd/tracing/src/test.rs +++ b/linkerd/tracing/src/test.rs @@ -19,11 +19,13 @@ pub fn trace_subscriber(default: impl ToString) -> (Dispatch, Handle) { Settings::for_test(log_level, log_format).build() } -pub fn with_default_filter(default: impl ToString) -> tracing::dispatcher::DefaultGuard { - let (d, _) = trace_subscriber(default); - tracing::dispatcher::set_default(&d) +pub fn with_default_filter( + default: impl ToString, +) -> (tracing::dispatcher::DefaultGuard, crate::Handle) { + let (d, handle) = trace_subscriber(default); + (tracing::dispatcher::set_default(&d), handle) } -pub fn trace_init() -> tracing::dispatcher::DefaultGuard { +pub fn trace_init() -> (tracing::dispatcher::DefaultGuard, crate::Handle) { with_default_filter(DEFAULT_LOG) } From b89dc5fab08f69dbc6aa9670fd98024d43f7925d Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 15:04:14 -0700 Subject: [PATCH 38/50] hmm so having a layer filter there breaks it? may be a tracing bug! Signed-off-by: Eliza Weisman --- linkerd/tracing/src/lib.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index e63f48a6bf..c7a1458910 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -11,11 +11,7 @@ use linkerd_error::Error; use std::str; use tracing::{Dispatch, Subscriber}; use tracing_subscriber::{ - filter::{EnvFilter, FilterFn}, - fmt::format, - prelude::*, - registry::LookupSpan, - reload, Layer, + filter::EnvFilter, fmt::format, prelude::*, registry::LookupSpan, reload, Layer, }; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; @@ -168,9 +164,6 @@ impl Settings { "JSON" => self.mk_json(), _ => self.mk_plain(), }; - let logger = logger.with_filter(FilterFn::new(|meta| { - !meta.target().starts_with(access_log::TRACE_TARGET) - })); let handle = Handle(Some(Inner { level, guard })); From e86e64db05765be4ca14455d39d79612123f4f54 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Fri, 8 Oct 2021 15:55:46 -0700 Subject: [PATCH 39/50] make access log layer format its own fields this fixes the issue with adding a layer filter to the `fmt` layer; i forgot the access log layer was relying on the `fmt` layer to format the span fields. anyway this fixes that. Signed-off-by: Eliza Weisman --- linkerd/tracing/src/access_log.rs | 66 ++++++++++++++++++------------- linkerd/tracing/src/lib.rs | 9 ++++- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 72048415ab..6f0ad06177 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,12 +1,9 @@ -use std::{io::Write, marker::PhantomData, path::PathBuf, sync::Arc}; -use tracing::{Id, Level, Metadata, Subscriber}; +use std::{io::Write, path::PathBuf, sync::Arc}; +use tracing::{span, Id, Level, Metadata, Subscriber}; use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; use tracing_subscriber::{ filter::{Directive, FilterFn, Filtered}, - fmt::{ - format::{DefaultFields, JsonFields}, - FormatFields, FormattedFields, MakeWriter, - }, + fmt::{format::DefaultFields, FormatFields, FormattedFields, MakeWriter}, layer::{Context, Layer}, registry::LookupSpan, }; @@ -22,7 +19,7 @@ pub(super) type AccessLogLayer = Filtered; pub(super) struct Writer { make_writer: NonBlocking, - _f: PhantomData, + formatter: F, } pub(super) fn build() -> Option<(AccessLogLayer, Guard, Directive)> @@ -74,22 +71,7 @@ impl Writer { pub fn new(make_writer: NonBlocking) -> Self { Self { make_writer, - _f: PhantomData::default(), - } - } -} - -impl Writer { - #[inline(always)] - fn cares_about(&self, meta: &Metadata<'_>) -> bool { - meta.target() == TRACE_TARGET - } - - #[allow(dead_code)] - pub fn into_json(self) -> Writer { - Writer { - make_writer: self.make_writer, - _f: PhantomData, + formatter: Default::default(), } } } @@ -99,13 +81,41 @@ where S: Subscriber + for<'span> LookupSpan<'span>, F: for<'writer> FormatFields<'writer> + 'static, { + fn new_span(&self, attrs: &span::Attributes<'_>, id: &Id, ctx: Context<'_, S>) { + let span = ctx.span(id).expect("Span not found, this is a bug"); + let mut extensions = span.extensions_mut(); + + if extensions.get_mut::>().is_none() { + let mut buf = String::new(); + if self.formatter.format_fields(&mut buf, attrs).is_ok() { + let fmt_fields = FormattedFields::::new(buf); + extensions.insert(fmt_fields); + } + } + } + + fn on_record(&self, id: &Id, values: &span::Record<'_>, ctx: Context<'_, S>) { + let span = ctx.span(id).expect("Span not found, this is a bug"); + let mut extensions = span.extensions_mut(); + if let Some(FormattedFields { ref mut fields, .. }) = + extensions.get_mut::>() + { + let _ = self.formatter.add_fields(fields, values); + return; + } + + let mut buf = String::new(); + if self.formatter.format_fields(&mut buf, values).is_ok() { + let fmt_fields = FormattedFields::::new(buf); + extensions.insert(fmt_fields); + } + } + fn on_close(&self, id: Id, ctx: Context<'_, S>) { if let Some(span) = ctx.span(&id) { - if self.cares_about(span.metadata()) { - if let Some(fields) = span.extensions().get::>() { - let mut writer = self.make_writer.make_writer(); - let _ = writeln!(&mut writer, "{}", fields.fields); - } + if let Some(fields) = span.extensions().get::>() { + let mut writer = self.make_writer.make_writer(); + let _ = writeln!(&mut writer, "{}", fields.fields); } } } diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index c7a1458910..e63f48a6bf 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -11,7 +11,11 @@ use linkerd_error::Error; use std::str; use tracing::{Dispatch, Subscriber}; use tracing_subscriber::{ - filter::EnvFilter, fmt::format, prelude::*, registry::LookupSpan, reload, Layer, + filter::{EnvFilter, FilterFn}, + fmt::format, + prelude::*, + registry::LookupSpan, + reload, Layer, }; const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; @@ -164,6 +168,9 @@ impl Settings { "JSON" => self.mk_json(), _ => self.mk_plain(), }; + let logger = logger.with_filter(FilterFn::new(|meta| { + !meta.target().starts_with(access_log::TRACE_TARGET) + })); let handle = Handle(Some(Inner { level, guard })); From 69c4cefb94e7915a840cdc33e638d362794fe653 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 14 Oct 2021 12:02:42 -0700 Subject: [PATCH 40/50] implement apache common log format Signed-off-by: Eliza Weisman --- linkerd/http-access-log/src/lib.rs | 16 +++---- linkerd/tracing/src/access_log.rs | 71 +++++++++++++++++++++++++++--- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index 2b074d8679..d57495a633 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -112,20 +112,20 @@ where }; let span = span!(target: TRACE_TARGET, Level::INFO, "http", - timestamp = %now(), client.addr = %self.client_addr, - client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or_default(), - processing_ns = field::Empty, - total_ns = field::Empty, + client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or("-"), + timestamp = %now(), method = request.method().as_str(), uri = %request.uri(), version = ?request.version(), - user_agent = get_header(http::header::USER_AGENT), - host = get_header(http::header::HOST), trace_id = trace_id(), - status = field::Empty, request_bytes = get_header(http::header::CONTENT_LENGTH), - response_bytes = field::Empty + status = field::Empty, + response_bytes = field::Empty, + total_ns = field::Empty, + processing_ns = field::Empty, + user_agent = get_header(http::header::USER_AGENT), + host = get_header(http::header::HOST), ); if span.is_disabled() { diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 6f0ad06177..f38da4cee6 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,9 +1,10 @@ -use std::{io::Write, path::PathBuf, sync::Arc}; -use tracing::{span, Id, Level, Metadata, Subscriber}; +use std::{fmt, io::Write, path::PathBuf, sync::Arc}; +use tracing::{field, span, Id, Level, Metadata, Subscriber}; use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; use tracing_subscriber::{ + field::RecordFields, filter::{Directive, FilterFn, Filtered}, - fmt::{format::DefaultFields, FormatFields, FormattedFields, MakeWriter}, + fmt::{FormatFields, FormattedFields, MakeWriter}, layer::{Context, Layer}, registry::LookupSpan, }; @@ -17,11 +18,21 @@ pub struct Guard(Arc); pub(super) type AccessLogLayer = Filtered; -pub(super) struct Writer { +pub(super) struct Writer { make_writer: NonBlocking, formatter: F, } +#[derive(Default)] +pub(super) struct ApacheCommon { + _p: (), +} + +struct ApacheCommonVisitor<'writer> { + res: fmt::Result, + writer: &'writer mut dyn fmt::Write, +} + pub(super) fn build() -> Option<(AccessLogLayer, Guard, Directive)> where S: Subscriber + for<'span> LookupSpan<'span>, @@ -67,7 +78,7 @@ where // === impl Writer === -impl Writer { +impl Writer { pub fn new(make_writer: NonBlocking) -> Self { Self { make_writer, @@ -120,3 +131,53 @@ where } } } + +impl ApacheCommon { + const SKIPPED_FIELDS: &'static [&'static str] = &[ + "trace_id", + "request_bytes", + "total_ns", + "processing_ns", + "response_bytes", + "user_agent", + "host", + ]; +} + +impl<'writer> FormatFields<'writer> for ApacheCommon { + fn format_fields( + &self, + writer: &'writer mut dyn fmt::Write, + fields: R, + ) -> fmt::Result { + let mut visitor = ApacheCommonVisitor { + writer, + res: Ok(()), + }; + fields.record(&mut visitor); + visitor.res + } + + fn add_fields(&self, current: &'writer mut String, fields: &span::Record<'_>) -> fmt::Result { + self.format_fields(current, fields) + } +} + +impl field::Visit for ApacheCommonVisitor<'_> { + fn record_str(&mut self, field: &field::Field, val: &str) { + self.record_debug(field, &format_args!("{}", val)) + } + + fn record_debug(&mut self, field: &field::Field, val: &dyn fmt::Debug) { + use fmt::Write; + self.res = match field.name() { + n if ApacheCommon::SKIPPED_FIELDS.contains(&n) => return, + "timestamp" => write!(&mut self.writer, " [{:?}]", val), + "client.addr" => write!(&mut self.writer, "{:?}", val), + "client.id" => write!(&mut self.writer, " {:?} -", val), + "method" => write!(&mut self.writer, " \"{:?}", val), + "version" => write!(&mut self.writer, " {:?}\"", val), + _ => write!(&mut self.writer, " {:?}", val), + } + } +} From c391b7b3407de1bf4a633feb31a6629d7a2791e7 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Wed, 20 Oct 2021 12:47:16 -0700 Subject: [PATCH 41/50] Update linkerd/http-access-log/src/lib.rs Co-authored-by: Oliver Gould --- linkerd/http-access-log/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index d57495a633..343f2ad87b 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -113,7 +113,7 @@ where let span = span!(target: TRACE_TARGET, Level::INFO, "http", client.addr = %self.client_addr, - client.id = self.client_id.as_ref().map(identity::Name::as_ref).unwrap_or("-"), + client.id = self.client_id.as_ref().map(|n| n.as_str()).unwrap_or("-"), timestamp = %now(), method = request.method().as_str(), uri = %request.uri(), From 21e2a788448c72eda32ea8f56cf6679766871931 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 28 Oct 2021 10:07:18 -0700 Subject: [PATCH 42/50] remove `chrono` dep Signed-off-by: Eliza Weisman --- Cargo.lock | 8 +++++++- linkerd/http-access-log/Cargo.toml | 2 +- linkerd/http-access-log/src/lib.rs | 13 ++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a09e009a71..5ba484f524 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -483,6 +483,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.14" @@ -985,9 +991,9 @@ dependencies = [ name = "linkerd-http-access-log" version = "0.1.0" dependencies = [ - "chrono", "futures", "http", + "humantime", "linkerd-identity", "linkerd-proxy-transport", "linkerd-stack", diff --git a/linkerd/http-access-log/Cargo.toml b/linkerd/http-access-log/Cargo.toml index d3eb235970..6f4a39e2d3 100644 --- a/linkerd/http-access-log/Cargo.toml +++ b/linkerd/http-access-log/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" publish = false [dependencies] -chrono = "0.4.15" +humantime = "2" futures = "0.3" http = "0.2" pin-project = "1" diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index 343f2ad87b..9e9af53422 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -13,7 +13,7 @@ use std::{ net::SocketAddr, pin::Pin, task::{Context, Poll}, - time::{Duration, Instant}, + time::{Duration, Instant, SystemTime}, }; use svc::{NewService, Param}; use tracing::{field, span, Level, Span}; @@ -105,12 +105,6 @@ where .unwrap_or_default() }; - let now = || { - chrono::Utc::now().format_with_items( - [chrono::format::Item::Fixed(chrono::format::Fixed::RFC3339)].iter(), - ) - }; - let span = span!(target: TRACE_TARGET, Level::INFO, "http", client.addr = %self.client_addr, client.id = self.client_id.as_ref().map(|n| n.as_str()).unwrap_or("-"), @@ -191,3 +185,8 @@ where Poll::Ready(Ok(response)) } } + +#[inline] +fn now() -> humantime::Rfc3339Timestamp { + humantime::format_rfc3339(SystemTime::now()) +} From 128d4a1721074aa786248cfb72fae4e1e5569b9e Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 28 Oct 2021 10:11:09 -0700 Subject: [PATCH 43/50] update access log to `tracing-subscriber` 0.3 Signed-off-by: Eliza Weisman --- Cargo.lock | 54 ++++++------------------------- linkerd/tracing/Cargo.toml | 2 +- linkerd/tracing/src/access_log.rs | 48 ++++++++++++++------------- 3 files changed, 37 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ba484f524..3076ea78cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,19 +127,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "time", - "winapi", -] - [[package]] name = "crc32fast" version = "1.2.1" @@ -838,7 +825,7 @@ dependencies = [ "tonic", "tower", "tracing", - "tracing-subscriber 0.3.1", + "tracing-subscriber", "webpki", ] @@ -885,7 +872,7 @@ dependencies = [ "tokio-test", "tower", "tracing", - "tracing-subscriber 0.3.1", + "tracing-subscriber", ] [[package]] @@ -1507,7 +1494,7 @@ dependencies = [ "tracing", "tracing-appender", "tracing-log", - "tracing-subscriber 0.3.1", + "tracing-subscriber", ] [[package]] @@ -1681,16 +1668,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.14" @@ -2214,12 +2191,12 @@ dependencies = [ [[package]] name = "time" -version = "0.1.43" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "99beeb0daeac2bd1e86ac2c21caddecb244b39a093594da1a661ec2060c7aedd" dependencies = [ + "itoa", "libc", - "winapi", ] [[package]] @@ -2433,13 +2410,13 @@ dependencies = [ [[package]] name = "tracing-appender" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9965507e507f12c8901432a33e31131222abac31edd90cabbcf85cf544b7127a" +checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366" dependencies = [ - "chrono", "crossbeam-channel", - "tracing-subscriber 0.2.25", + "time", + "tracing-subscriber", ] [[package]] @@ -2493,17 +2470,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.1" diff --git a/linkerd/tracing/Cargo.toml b/linkerd/tracing/Cargo.toml index c9c1bd569a..3fb79042a7 100644 --- a/linkerd/tracing/Cargo.toml +++ b/linkerd/tracing/Cargo.toml @@ -14,7 +14,7 @@ ansi = ["tracing-subscriber/ansi"] linkerd-error = { path = "../error" } tokio = { version = "1", features = ["time"] } tracing = "0.1.29" -tracing-appender = "0.1.2" +tracing-appender = "0.2" tracing-log = "0.1.2" [dependencies.tracing-subscriber] diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index f38da4cee6..fe823f8dfc 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -4,7 +4,7 @@ use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; use tracing_subscriber::{ field::RecordFields, filter::{Directive, FilterFn, Filtered}, - fmt::{FormatFields, FormattedFields, MakeWriter}, + fmt::{format, FormatFields, FormattedFields, MakeWriter}, layer::{Context, Layer}, registry::LookupSpan, }; @@ -30,7 +30,7 @@ pub(super) struct ApacheCommon { struct ApacheCommonVisitor<'writer> { res: fmt::Result, - writer: &'writer mut dyn fmt::Write, + writer: format::Writer<'writer>, } pub(super) fn build() -> Option<(AccessLogLayer, Guard, Directive)> @@ -92,15 +92,18 @@ where S: Subscriber + for<'span> LookupSpan<'span>, F: for<'writer> FormatFields<'writer> + 'static, { - fn new_span(&self, attrs: &span::Attributes<'_>, id: &Id, ctx: Context<'_, S>) { + fn on_new_span(&self, attrs: &span::Attributes<'_>, id: &Id, ctx: Context<'_, S>) { let span = ctx.span(id).expect("Span not found, this is a bug"); let mut extensions = span.extensions_mut(); if extensions.get_mut::>().is_none() { - let mut buf = String::new(); - if self.formatter.format_fields(&mut buf, attrs).is_ok() { - let fmt_fields = FormattedFields::::new(buf); - extensions.insert(fmt_fields); + let mut fields = FormattedFields::::new(String::new()); + if self + .formatter + .format_fields(fields.as_writer(), attrs) + .is_ok() + { + extensions.insert(fields); } } } @@ -108,17 +111,18 @@ where fn on_record(&self, id: &Id, values: &span::Record<'_>, ctx: Context<'_, S>) { let span = ctx.span(id).expect("Span not found, this is a bug"); let mut extensions = span.extensions_mut(); - if let Some(FormattedFields { ref mut fields, .. }) = - extensions.get_mut::>() - { + if let Some(fields) = extensions.get_mut::>() { let _ = self.formatter.add_fields(fields, values); return; } - let mut buf = String::new(); - if self.formatter.format_fields(&mut buf, values).is_ok() { - let fmt_fields = FormattedFields::::new(buf); - extensions.insert(fmt_fields); + let mut fields = FormattedFields::::new(String::new()); + if self + .formatter + .format_fields(fields.as_writer(), values) + .is_ok() + { + extensions.insert(fields); } } @@ -145,11 +149,7 @@ impl ApacheCommon { } impl<'writer> FormatFields<'writer> for ApacheCommon { - fn format_fields( - &self, - writer: &'writer mut dyn fmt::Write, - fields: R, - ) -> fmt::Result { + fn format_fields(&self, writer: format::Writer<'_>, fields: R) -> fmt::Result { let mut visitor = ApacheCommonVisitor { writer, res: Ok(()), @@ -158,8 +158,13 @@ impl<'writer> FormatFields<'writer> for ApacheCommon { visitor.res } - fn add_fields(&self, current: &'writer mut String, fields: &span::Record<'_>) -> fmt::Result { - self.format_fields(current, fields) + #[inline] + fn add_fields( + &self, + current: &mut FormattedFields, + fields: &span::Record<'_>, + ) -> fmt::Result { + self.format_fields(current.as_writer(), fields) } } @@ -169,7 +174,6 @@ impl field::Visit for ApacheCommonVisitor<'_> { } fn record_debug(&mut self, field: &field::Field, val: &dyn fmt::Debug) { - use fmt::Write; self.res = match field.name() { n if ApacheCommon::SKIPPED_FIELDS.contains(&n) => return, "timestamp" => write!(&mut self.writer, " [{:?}]", val), From 4da351add0d01834c193dfdaa1f8ffb3728de316 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 28 Oct 2021 12:06:07 -0700 Subject: [PATCH 44/50] sort deps Signed-off-by: Eliza Weisman --- linkerd/http-access-log/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkerd/http-access-log/Cargo.toml b/linkerd/http-access-log/Cargo.toml index 6f4a39e2d3..89165e7d08 100644 --- a/linkerd/http-access-log/Cargo.toml +++ b/linkerd/http-access-log/Cargo.toml @@ -7,9 +7,9 @@ edition = "2018" publish = false [dependencies] -humantime = "2" futures = "0.3" http = "0.2" +humantime = "2" pin-project = "1" linkerd-stack = { path = "../stack" } linkerd-identity = { path = "../identity" } From b204ea00a0365035e6f9c5ce8283fd3825015691 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 28 Oct 2021 12:07:08 -0700 Subject: [PATCH 45/50] fix unused field warning Signed-off-by: Eliza Weisman --- linkerd/tracing/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index e63f48a6bf..9e3174db97 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -37,7 +37,7 @@ pub struct Handle(Option); #[derive(Clone)] struct Inner { level: level::Handle, - guard: Option, + _guard: Option, } /// Initialize tracing and logging with the value of the `ENV_LOG` @@ -154,7 +154,7 @@ impl Settings { let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); let mut filter = EnvFilter::new(log_level); - let (access_log, guard) = match access_log::build() { + let (access_log, _guard) = match access_log::build() { Some((access_log, guard, directive)) => { filter = filter.add_directive(directive); (Some(access_log), Some(guard)) @@ -172,7 +172,7 @@ impl Settings { !meta.target().starts_with(access_log::TRACE_TARGET) })); - let handle = Handle(Some(Inner { level, guard })); + let handle = Handle(Some(Inner { level, _guard })); let dispatch = tracing_subscriber::registry() .with(filter) From 6985abef0e547e71c0816414fb372b0e01563920 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Tue, 18 Jan 2022 15:21:00 -0800 Subject: [PATCH 46/50] trace: write the access log to stderr Signed-off-by: Eliza Weisman --- Cargo.lock | 22 +++------------- linkerd/tracing/src/access_log.rs | 43 ++++++++----------------------- linkerd/tracing/src/lib.rs | 21 ++++++--------- 3 files changed, 22 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67863a6b85..6673df24a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -400,12 +400,10 @@ checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" [[package]] name = "futures-macro" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" +checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" dependencies = [ - "autocfg", - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -438,8 +436,6 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] @@ -1976,18 +1972,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" version = "1.0.32" @@ -2408,7 +2392,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99beeb0daeac2bd1e86ac2c21caddecb244b39a093594da1a661ec2060c7aedd" dependencies = [ - "itoa", + "itoa 0.4.8", "libc", ] diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index fe823f8dfc..51c5b8b059 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,10 +1,10 @@ -use std::{fmt, io::Write, path::PathBuf, sync::Arc}; +use std::{fmt, sync::Arc}; use tracing::{field, span, Id, Level, Metadata, Subscriber}; -use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; +use tracing_appender::non_blocking::WorkerGuard; use tracing_subscriber::{ field::RecordFields, filter::{Directive, FilterFn, Filtered}, - fmt::{format, FormatFields, FormattedFields, MakeWriter}, + fmt::{format, FormatFields, FormattedFields}, layer::{Context, Layer}, registry::LookupSpan, }; @@ -19,7 +19,6 @@ pub struct Guard(Arc); pub(super) type AccessLogLayer = Filtered; pub(super) struct Writer { - make_writer: NonBlocking, formatter: F, } @@ -33,33 +32,15 @@ struct ApacheCommonVisitor<'writer> { writer: format::Writer<'writer>, } -pub(super) fn build() -> Option<(AccessLogLayer, Guard, Directive)> +pub(super) fn build() -> Option<(AccessLogLayer, Directive)> where S: Subscriber + for<'span> LookupSpan<'span>, { - // Create the access log file, or open it in append-only mode if - // it already exists. - let file = { - let path = { - let p = std::env::var(ENV_ACCESS_LOG).ok()?; - p.parse::() - .map_err(|e| eprintln!("{} is not a valid path: {}", p, e)) - .ok()? - }; + // Is access logging enabled? + let _ = std::env::var(ENV_ACCESS_LOG).ok()?; - std::fs::OpenOptions::new() - .append(true) - .create(true) - .open(&path) - .map_err(|e| eprintln!("Failed to open file {}: {}", path.display(), e,)) - .ok()? - }; - - // If we successfully created or opened the access log file, - // build the access log layer. - eprintln!("Writing access log to {:?}", file); - let (non_blocking, guard) = tracing_appender::non_blocking(file); - let writer = Writer::new(non_blocking).with_filter( + // If access logging is enabled, build the access log layer. + let writer = Writer::new().with_filter( FilterFn::new( (|meta| meta.level() == &Level::INFO && meta.target().starts_with(TRACE_TARGET)) as fn(&Metadata<'_>) -> bool, @@ -73,15 +54,14 @@ where .parse() .expect("access logging filter directive must parse"); - Some((writer, Guard(guard.into()), directive)) + Some((writer, directive)) } // === impl Writer === impl Writer { - pub fn new(make_writer: NonBlocking) -> Self { + pub fn new() -> Self { Self { - make_writer, formatter: Default::default(), } } @@ -129,8 +109,7 @@ where fn on_close(&self, id: Id, ctx: Context<'_, S>) { if let Some(span) = ctx.span(&id) { if let Some(fields) = span.extensions().get::>() { - let mut writer = self.make_writer.make_writer(); - let _ = writeln!(&mut writer, "{}", fields.fields); + eprintln!("{}", fields.fields); } } } diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 9e3174db97..9e1003c5ad 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -32,13 +32,7 @@ pub struct Settings { } #[derive(Clone)] -pub struct Handle(Option); - -#[derive(Clone)] -struct Inner { - level: level::Handle, - _guard: Option, -} +pub struct Handle(Option); /// Initialize tracing and logging with the value of the `ENV_LOG` /// environment variable as the verbosity-level filter. @@ -154,13 +148,14 @@ impl Settings { let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); let mut filter = EnvFilter::new(log_level); - let (access_log, _guard) = match access_log::build() { - Some((access_log, guard, directive)) => { + let access_log = match access_log::build() { + Some((access_log, directive)) => { filter = filter.add_directive(directive); - (Some(access_log), Some(guard)) + Some(access_log) } - None => (None, None), + None => None, }; + let (filter, level) = reload::Layer::new(filter); let level = level::Handle::new(level); @@ -172,7 +167,7 @@ impl Settings { !meta.target().starts_with(access_log::TRACE_TARGET) })); - let handle = Handle(Some(Inner { level, _guard })); + let handle = Handle(Some(level)); let dispatch = tracing_subscriber::registry() .with(filter) @@ -192,6 +187,6 @@ impl Handle { } pub fn level(&self) -> Option<&level::Handle> { - self.0.as_ref().map(|inner| &inner.level) + self.0.as_ref() } } From 8f37cccf31bde6c02565f0ec76b3269682cb39b1 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Wed, 19 Jan 2022 13:47:13 -0800 Subject: [PATCH 47/50] move env configuration out of access_log module Signed-off-by: Eliza Weisman --- linkerd/tracing/src/access_log.rs | 10 ++-------- linkerd/tracing/src/lib.rs | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 51c5b8b059..2d7d873a82 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -9,8 +9,6 @@ use tracing_subscriber::{ registry::LookupSpan, }; -const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; - pub const TRACE_TARGET: &str = "_access_log"; #[derive(Clone, Debug)] @@ -32,14 +30,10 @@ struct ApacheCommonVisitor<'writer> { writer: format::Writer<'writer>, } -pub(super) fn build() -> Option<(AccessLogLayer, Directive)> +pub(super) fn build() -> (AccessLogLayer, Directive) where S: Subscriber + for<'span> LookupSpan<'span>, { - // Is access logging enabled? - let _ = std::env::var(ENV_ACCESS_LOG).ok()?; - - // If access logging is enabled, build the access log layer. let writer = Writer::new().with_filter( FilterFn::new( (|meta| meta.level() == &Level::INFO && meta.target().starts_with(TRACE_TARGET)) @@ -54,7 +48,7 @@ where .parse() .expect("access logging filter directive must parse"); - Some((writer, directive)) + (writer, directive) } // === impl Writer === diff --git a/linkerd/tracing/src/lib.rs b/linkerd/tracing/src/lib.rs index 9e1003c5ad..22b75a3586 100644 --- a/linkerd/tracing/src/lib.rs +++ b/linkerd/tracing/src/lib.rs @@ -20,6 +20,7 @@ use tracing_subscriber::{ const ENV_LOG_LEVEL: &str = "LINKERD2_PROXY_LOG"; const ENV_LOG_FORMAT: &str = "LINKERD2_PROXY_LOG_FORMAT"; +const ENV_ACCESS_LOG: &str = "LINKERD2_PROXY_ACCESS_LOG"; const DEFAULT_LOG_LEVEL: &str = "warn,linkerd=info"; const DEFAULT_LOG_FORMAT: &str = "PLAIN"; @@ -28,6 +29,7 @@ const DEFAULT_LOG_FORMAT: &str = "PLAIN"; pub struct Settings { filter: Option, format: Option, + access_log: bool, is_test: bool, } @@ -79,6 +81,7 @@ impl Settings { Some(Self { filter, format: std::env::var(ENV_LOG_FORMAT).ok(), + access_log: std::env::var(ENV_ACCESS_LOG).is_ok(), is_test: false, }) } @@ -87,6 +90,7 @@ impl Settings { Self { filter: Some(filter), format: Some(format), + access_log: false, is_test: true, } } @@ -148,12 +152,14 @@ impl Settings { let log_level = self.filter.as_deref().unwrap_or(DEFAULT_LOG_LEVEL); let mut filter = EnvFilter::new(log_level); - let access_log = match access_log::build() { - Some((access_log, directive)) => { - filter = filter.add_directive(directive); - Some(access_log) - } - None => None, + + // If access logging is enabled, build the access log layer. + let access_log = if self.access_log { + let (access_log, directive) = access_log::build(); + filter = filter.add_directive(directive); + Some(access_log) + } else { + None }; let (filter, level) = reload::Layer::new(filter); From 74226c352e95ed1dd47c6b25a53b288b5155c263 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Wed, 19 Jan 2022 13:49:59 -0800 Subject: [PATCH 48/50] rm dead code Signed-off-by: Eliza Weisman --- Cargo.lock | 42 ------------------------------- linkerd/tracing/Cargo.toml | 1 - linkerd/tracing/src/access_log.rs | 6 +---- 3 files changed, 1 insertion(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6673df24a7..e614bacb82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -207,26 +207,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if", - "lazy_static", -] - [[package]] name = "data-encoding" version = "2.3.2" @@ -1657,7 +1637,6 @@ dependencies = [ "linkerd-error", "tokio", "tracing", - "tracing-appender", "tracing-log", "tracing-subscriber", ] @@ -2386,16 +2365,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "time" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99beeb0daeac2bd1e86ac2c21caddecb244b39a093594da1a661ec2060c7aedd" -dependencies = [ - "itoa 0.4.8", - "libc", -] - [[package]] name = "tinyvec" version = "1.5.1" @@ -2615,17 +2584,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-appender" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366" -dependencies = [ - "crossbeam-channel", - "time", - "tracing-subscriber", -] - [[package]] name = "tracing-attributes" version = "0.1.18" diff --git a/linkerd/tracing/Cargo.toml b/linkerd/tracing/Cargo.toml index 3fb79042a7..268656a593 100644 --- a/linkerd/tracing/Cargo.toml +++ b/linkerd/tracing/Cargo.toml @@ -14,7 +14,6 @@ ansi = ["tracing-subscriber/ansi"] linkerd-error = { path = "../error" } tokio = { version = "1", features = ["time"] } tracing = "0.1.29" -tracing-appender = "0.2" tracing-log = "0.1.2" [dependencies.tracing-subscriber] diff --git a/linkerd/tracing/src/access_log.rs b/linkerd/tracing/src/access_log.rs index 2d7d873a82..d79ee63771 100644 --- a/linkerd/tracing/src/access_log.rs +++ b/linkerd/tracing/src/access_log.rs @@ -1,6 +1,5 @@ -use std::{fmt, sync::Arc}; +use std::fmt; use tracing::{field, span, Id, Level, Metadata, Subscriber}; -use tracing_appender::non_blocking::WorkerGuard; use tracing_subscriber::{ field::RecordFields, filter::{Directive, FilterFn, Filtered}, @@ -11,9 +10,6 @@ use tracing_subscriber::{ pub const TRACE_TARGET: &str = "_access_log"; -#[derive(Clone, Debug)] -pub struct Guard(Arc); - pub(super) type AccessLogLayer = Filtered; pub(super) struct Writer { From 52d6d0a8b730489e8fd464f44c45c70c49da851c Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Wed, 19 Jan 2022 13:56:04 -0800 Subject: [PATCH 49/50] rm unneeded futures deps Signed-off-by: Eliza Weisman --- Cargo.lock | 14 +------------- linkerd/http-access-log/Cargo.toml | 2 +- linkerd/http-access-log/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e614bacb82..c742cda184 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -378,17 +378,6 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" -[[package]] -name = "futures-macro" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "futures-sink" version = "0.3.19" @@ -410,7 +399,6 @@ dependencies = [ "futures-channel", "futures-core", "futures-io", - "futures-macro", "futures-sink", "futures-task", "memchr", @@ -1084,7 +1072,7 @@ dependencies = [ name = "linkerd-http-access-log" version = "0.1.0" dependencies = [ - "futures", + "futures-core", "http", "humantime", "linkerd-identity", diff --git a/linkerd/http-access-log/Cargo.toml b/linkerd/http-access-log/Cargo.toml index 89165e7d08..a94691880d 100644 --- a/linkerd/http-access-log/Cargo.toml +++ b/linkerd/http-access-log/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" publish = false [dependencies] -futures = "0.3" +futures-core = "0.3" http = "0.2" humantime = "2" pin-project = "1" diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index 9e9af53422..12d93f519c 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -1,7 +1,7 @@ #![deny(warnings, rust_2018_idioms)] #![forbid(unsafe_code)] -use futures::TryFuture; +use futures_core::TryFuture; use linkerd_identity as identity; use linkerd_proxy_transport::{ClientAddr, Remote}; use linkerd_stack as svc; From 6c6a8a5c69ac95198a16aba9dfff476be3f39a30 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Thu, 20 Jan 2022 12:32:22 -0800 Subject: [PATCH 50/50] add some more comments Signed-off-by: Eliza Weisman --- linkerd/http-access-log/src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/linkerd/http-access-log/src/lib.rs b/linkerd/http-access-log/src/lib.rs index 12d93f519c..a01a5677bb 100644 --- a/linkerd/http-access-log/src/lib.rs +++ b/linkerd/http-access-log/src/lib.rs @@ -45,6 +45,18 @@ pub struct AccessLogFuture { } impl NewAccessLog { + /// Returns a new `NewAccessLog` layer that wraps an inner service with + /// access logging middleware. + /// + /// The access log is recorded by adding a `tracing` span to the service's + /// future. If access logging is not enabled by the `tracing` subscriber, + /// this span will never be enabled, and it can be skipped cheaply. When + /// access logging *is* enabled, additional data will be recorded when the + /// response future completes. + /// + /// Recording the access log will introduce additional overhead in the + /// request path, but this is largely avoided when access logging is not + /// enabled. #[inline] pub fn layer() -> impl svc::layer::Layer { svc::layer::mk(|inner| NewAccessLog { inner }) @@ -122,6 +134,9 @@ where host = get_header(http::header::HOST), ); + // The access log span is only enabled by the `tracing` subscriber if + // access logs are being recorded. If it's disabled, we can skip + // recording additional data in the response future. if span.is_disabled() { return AccessLogFuture { data: None,