From 7fe2825e3576407fb5867dcbdb152576b6b6d99b Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Wed, 18 Jan 2023 11:07:14 -0500 Subject: [PATCH 1/2] Add notes on log sinks --- content/notes/log-sinks/index.md | 120 ++++++++++++++++++++ content/notes/log-sinks/papertrail-logs.png | Bin 0 -> 50368 bytes 2 files changed, 120 insertions(+) create mode 100644 content/notes/log-sinks/index.md create mode 100644 content/notes/log-sinks/papertrail-logs.png diff --git a/content/notes/log-sinks/index.md b/content/notes/log-sinks/index.md new file mode 100644 index 000000000..2f82b626d --- /dev/null +++ b/content/notes/log-sinks/index.md @@ -0,0 +1,120 @@ +--- +title: "A Survey of Log Sinks for Low-Volume Apps" +date: 2023-01-18T09:52:25-05:00 +--- + +My apps generate <10MB of logs per month. Want a log solution that provides high retention (1 year), searches for at least a month (year is better) at a price <=$50/mo. + +Mainly want it for searching web app logs, viewing logs. Don't care about graphs, alerts. + +## Papertrail + +Lets you customize volume and search duration. Doesn't let you customize retention, but a year is decent. I think you can also archite to S3. + +Aimed at large companies. Owned by Solarwinds, who was subject of famous hack. + +Insecure by default. Accepts logs from any host. Hard to tighten this up on Fly.io since the VMs are ephemeral, and Fly doesn't have support for authenticating to Papertrail. Would probably be straightforward to add, though, since fly-log-shipper is open-source. + +Bad at integrating with fly.io's vector format. + +{{}} + +## Axiom + +90-day retention (lowest-cost plan) costs $99/month. + +## Datadog + +"Contact us" pricing for log retention beyond 30 days. + +## Honeycomb + +Max retention is 60-days. + +Lowest-cost paid plan is $130/mo. + +Much broader than just logging. + +## Humio + +Is now FalconLogScale. Huge platform, no published pricing. + +## LogDNA + +Is now mezmo + +Feels very Enterprise focused. + +No published pricing. + +## Logflare + +Heavily optimized for graphing. + +Can show a max of 100 matching lines. Difficult to shift to an earlier time window because it requires non-trivial adjustments to their custom query language. + +Lots of papercut bugs in the web UI. + +Seem to be in a transition period where they're merging with Supabase, and Supabase is doing their support (badly). + +Lets you bring your own BigQuery. Only costs $10/mo instead of $15 for using one of their BigQuery tables. Good if your BigQuery usage will be low. + +Nice: Gives you the BigQuery query so you can run the command directly. + +Web UI is ugly. + +## Logtail + +$30/mo + +Processes events well. + +Max retention is 30 days, regardless of your log volume. + +Pretty web UI. + +Web UI is slow. + +Focused on logging. + +Immediately deletes all of your logs as soon as you say you want to cancel your subscription (doesn't let you keep it until the end of your subscription period). + +Can archive beyond retention to S3-compatible storage or Backblaze. Might be easier to just send a copy from Fly directly to a cloud storage bucket. + +## Loki + +Part of Grafana + +Open-source + +Hosted version is $8/mo for max of 30-day log retention + + + +## New Relic + +"Data Plus" plan has 90+ day retention, but no published pricing for it. + +## Sematext + +Standard paid plan has 15 days of retention and costs $95/mo. + +1-year retention costs $450/mo + +## Uptrace + +Maximum log retention is 30 days. + +Doesn't seem very good at searching logs. + +## EraSearch + +30-day retention by default + +1-year retention "with annual contract" + +Couldn't find any information about annual contract, even after signing up. + +Couldn't figure out how to connect it to fly.io. I see access tokens but none of the settings Fly wants: `ERASEARCH_URL`, `ERASEARCH_AUTH`, `ERASEARCH_INDEX` + +Seems very bloated, not very focused on logs. diff --git a/content/notes/log-sinks/papertrail-logs.png b/content/notes/log-sinks/papertrail-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1a54e5867efa22624a92ea2cf13759c9e13d59 GIT binary patch literal 50368 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 literal 0 HcmV?d00001 From 0a92db7ec5c5e7831c015b4b7f05d65c7e091104 Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Wed, 18 Jan 2023 11:08:35 -0500 Subject: [PATCH 2/2] work in progress --- content/notes/log-sinks/index.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/content/notes/log-sinks/index.md b/content/notes/log-sinks/index.md index 2f82b626d..172ec5bae 100644 --- a/content/notes/log-sinks/index.md +++ b/content/notes/log-sinks/index.md @@ -7,18 +7,6 @@ My apps generate <10MB of logs per month. Want a log solution that provides h Mainly want it for searching web app logs, viewing logs. Don't care about graphs, alerts. -## Papertrail - -Lets you customize volume and search duration. Doesn't let you customize retention, but a year is decent. I think you can also archite to S3. - -Aimed at large companies. Owned by Solarwinds, who was subject of famous hack. - -Insecure by default. Accepts logs from any host. Hard to tighten this up on Fly.io since the VMs are ephemeral, and Fly doesn't have support for authenticating to Papertrail. Would probably be straightforward to add, though, since fly-log-shipper is open-source. - -Bad at integrating with fly.io's vector format. - -{{}} - ## Axiom 90-day retention (lowest-cost plan) costs $99/month. @@ -95,6 +83,18 @@ Hosted version is $8/mo for max of 30-day log retention "Data Plus" plan has 90+ day retention, but no published pricing for it. +## Papertrail + +Lets you customize volume and search duration. Doesn't let you customize retention, but a year is decent. I think you can also archite to S3. + +Aimed at large companies. Owned by Solarwinds, who was subject of famous hack. + +Insecure by default. Accepts logs from any host with no authentication as long as they guess the easily-guessable endpoint. Hard to tighten this up on Fly.io since the VMs are ephemeral, and Fly doesn't have support for authenticating to Papertrail. Would probably be straightforward to add, though, since fly-log-shipper is open-source. + +Bad at integrating with fly.io's vector format. + +{{}} + ## Sematext Standard paid plan has 15 days of retention and costs $95/mo.