From 61ce4dfa98d4f3dc419fef67be583f3390dc68a7 Mon Sep 17 00:00:00 2001 From: Tal Weiss <73443663+talwgx@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:10:02 -0400 Subject: [PATCH 1/2] elastic-hot-tier-budget: arm A alone and a by-lines E103 score phases-two-arm.sh takes ARM_A_ONLY=1 (no cluster B, no copy to it), render-fb-two-arm.py then keeps every returned record whole, and gen-receiver-values.mjs passes TENX_JAVA_HEAP for an engine image that runs on a JVM. score-e103.py matches each returned record's lines to the lines sent and counts records holding more than one container. Co-Authored-By: Claude Opus 5.5 --- .../rig/gen-receiver-values.mjs | 2 + elastic-hot-tier-budget/rig/phases-two-arm.sh | 9 +- .../rig/render-fb-two-arm.py | 14 +- elastic-hot-tier-budget/rig/score-e103.py | 178 ++++++++++++++++++ 4 files changed, 198 insertions(+), 5 deletions(-) create mode 100644 elastic-hot-tier-budget/rig/score-e103.py diff --git a/elastic-hot-tier-budget/rig/gen-receiver-values.mjs b/elastic-hot-tier-budget/rig/gen-receiver-values.mjs index 8ea074b..ee83810 100644 --- a/elastic-hot-tier-budget/rig/gen-receiver-values.mjs +++ b/elastic-hot-tier-budget/rig/gen-receiver-values.mjs @@ -88,6 +88,8 @@ for (const e of env) { else left.push(e); } const rigEnv = [['TENX_FLUENTBIT_OUTPUT_HOST', 'fluent-bit']]; +// An engine image that runs its jar on a JVM: TENX_JAVA_HEAP keeps the heap inside the memory limit. +if (process.env.TENX_JAVA_HEAP) rigEnv.push(['TENX_JAVA_HEAP', process.env.TENX_JAVA_HEAP]); // The MCP renders symbolMessageHashField and the utf8Size field list itself (elasticHotTier), so nothing is added. const measure = []; diff --git a/elastic-hot-tier-budget/rig/phases-two-arm.sh b/elastic-hot-tier-budget/rig/phases-two-arm.sh index 1f32153..3830f5a 100755 --- a/elastic-hot-tier-budget/rig/phases-two-arm.sh +++ b/elastic-hot-tier-budget/rig/phases-two-arm.sh @@ -12,7 +12,8 @@ set -euo pipefail HERE=$(cd "$(dirname "$0")" && pwd) RESULTS=${RESULTS:?results dir} RUN="$HERE/run.sh" -export ARM_B=1 ES_URL_B=http://127.0.0.1:9201 +# ARM_A_ONLY=1 runs arm A alone: no cluster B and no copy to it; Fluent Bit also keeps each returned record whole +if [ -z "${ARM_A_ONLY:-}" ]; then export ARM_B=1 ES_URL_B=http://127.0.0.1:9201; fi export POLICY_BRANCH=${POLICY_BRANCH:-test/elastic-hot-tier-policy} export FB_DIR=$RESULTS/fluent-bit KEEP_ROLLOVER=10m KEEP_FROZEN_AFTER=110m TD_ROLLOVER=10m ILM_POLL=100s METER_S=${METER_S:-100} export FROZEN_CACHE=${FROZEN_CACHE:-128mb} @@ -88,12 +89,12 @@ while :; do done "$RUN" logs -curl -s -m 30 -X POST http://127.0.0.1:9200/_ilm/stop > /dev/null; curl -s -m 30 -X POST http://127.0.0.1:9201/_ilm/stop > /dev/null +curl -s -m 30 -X POST http://127.0.0.1:9200/_ilm/stop > /dev/null; [ -z "${ARM_B:-}" ] || curl -s -m 30 -X POST http://127.0.0.1:9201/_ilm/stop > /dev/null "$RUN" mark ilm_stopped mkdir -p "$RESULTS/delivery" python3 "$HERE/dump-seq.py" http://127.0.0.1:9200 tenx-app,tenx-tierdown "$RESULTS/delivery/a.tsv.gz" > "$RESULTS/delivery/a.json" || true -python3 "$HERE/dump-seq.py" http://127.0.0.1:9201 native-app,native-overflow "$RESULTS/delivery/b.tsv.gz" > "$RESULTS/delivery/b.json" || true -for p in 9200 9201; do +[ -z "${ARM_B:-}" ] || python3 "$HERE/dump-seq.py" http://127.0.0.1:9201 native-app,native-overflow "$RESULTS/delivery/b.tsv.gz" > "$RESULTS/delivery/b.json" || true +for p in 9200 ${ARM_B:+9201}; do curl -s -m 60 "http://127.0.0.1:$p/_cat/indices?format=json&bytes=b&expand_wildcards=all&h=index,health,status,docs.count,store.size,creation.date" > "$RESULTS/delivery/cat-indices-$p.json" || true curl -s -m 60 "http://127.0.0.1:$p/_alias?filter_path=*.aliases" > "$RESULTS/delivery/aliases-$p.json" || true done diff --git a/elastic-hot-tier-budget/rig/render-fb-two-arm.py b/elastic-hot-tier-budget/rig/render-fb-two-arm.py index b6d08e5..b5a1cfe 100755 --- a/elastic-hot-tier-budget/rig/render-fb-two-arm.py +++ b/elastic-hot-tier-budget/rig/render-fb-two-arm.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 -"""Writes the two-arm Fluent Bit config with arm B's service list from top-half.py. +"""Writes the two-arm Fluent Bit config with arm B's service list from top-half.py. With ARM_A_ONLY set, +arm B's blocks are left out and every returned record is also written whole to returned.jsonl. render-fb-two-arm.py """ import json, os, re, shutil, sys @@ -8,6 +9,17 @@ os.makedirs(out, exist_ok=True) alt = '|'.join(re.escape(c) for c in rule['top_half']) conf = open(os.path.join(HERE, 'fluent-bit-two-arm', 'fluent-bit.conf.tmpl')).read().replace('@TOP_HALF@', alt) +if os.environ.get('ARM_A_ONLY'): + blocks = re.split(r'\n(?=\[)', conf) + conf = '\n'.join(b for b in blocks if 'armb' not in b).rstrip('\n') + ''' + +[OUTPUT] + Name file + Match routed.* + Path /data + File returned.jsonl + Format plain +''' open(os.path.join(out, 'fluent-bit.conf'), 'w').write(conf) shutil.copy(os.path.join(HERE, 'fluent-bit-two-arm', 'rig.lua'), os.path.join(out, 'rig.lua')) print(alt) diff --git a/elastic-hot-tier-budget/rig/score-e103.py b/elastic-hot-tier-budget/rig/score-e103.py new file mode 100644 index 0000000..c8bfd8b --- /dev/null +++ b/elastic-hot-tier-budget/rig/score-e103.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +"""Arm A's records by the lines they hold (engine ask E103). Reads the feed (replay/source.jsonl: seq s is +row (s - 1) mod rows), the feed's last seq (timeline feed_stop), and every record the Receiver returned, kept +whole by Fluent Bit (data/returned.jsonl, ARM_A_ONLY). Each record's non-blank lines are matched to the +non-blank lines sent: the first at or after the record's seq, each next one the nearest unused sent line with +the same text after the line before it (or, failing that, the nearest unused one before it). A record whose +matched lines came from more than one container is a cross-container record. +Reports: records, cross-container records, non-blank lines sent, matched, missing (sent, in no record) and +unmatched (returned, no unused sent line: a duplicate or a changed line), records whose lines are out of feed +order; beside them, the count the 2026-10-24 README used (records sorted by seq, each the run of seqs up to +the next record's, spanning containers), which assumes lines are grouped in arrival order; and the documents +in Elasticsearch (delivery/a.tsv.gz) with their summed line counts. Exit 1 on any cross-container record, +missing or unmatched line. + score-e103.py + score-e103.py --self-test regroups the same lines in arrival order at the same record seqs; + the count must equal the run-based count and be above 0""" +import bisect, collections, gzip, json, os, re, sys + +NB = re.compile(r'[^ \t\n\v\f\r]') +WINDOW = 200000 + + +def opener(p): + if os.path.exists(p): + return open(p) + return gzip.open(p + '.gz', 'rt') + + +def load(R): + src = [json.loads(l) for l in open(os.path.join(R, 'replay', 'source.jsonl'))] + final = None + for l in open(os.path.join(R, 'timeline.jsonl')): + e = json.loads(l) + if e.get('event') == 'feed_stop': + final = e.get('final_seq') + recs, own = [], 0 + with opener(os.path.join(R, 'data', 'returned.jsonl')) as f: + for l in f: + if not l.strip(): + continue + r = json.loads(l) + if r.get('seq') is None: + own += 1 + continue + recs.append((int(r['seq']), (r.get('kubernetes') or {}).get('container_name'), r.get('log') or '', r.get('_lines'))) + return src, final, recs, own + + +def sent_lines(src, N): + n = len(src) + ent = [] # (seq, text, container) per non-blank line, in feed order + for s in range(1, N + 1): + r = src[(s - 1) % n] + c = r['container_name'].lstrip('/') + for t in r['log'].split('\n'): + if NB.search(t): + ent.append((s, t.rstrip(), c)) + return ent + + +def score(ent, recs, src, N): + pos = collections.defaultdict(list) + for i, (_, t, _) in enumerate(ent): + pos[t].append(i) + seqs = [e[0] for e in ent] + used = bytearray(len(ent)) + + def take(t, prev): + p = pos.get(t) + if not p: + return None + k = bisect.bisect_right(p, prev) + j = k + while j < len(p) and p[j] - prev <= WINDOW: + if not used[p[j]]: + return p[j] + j += 1 + j = k - 1 + while j >= 0 and prev - p[j] <= WINDOW: + if not used[p[j]]: + return p[j] + j -= 1 + return None + + cross, unmatched, out_of_order, examples = 0, 0, 0, [] + for seq, c, log, _ in sorted(recs, key=lambda x: x[0]): + prev = bisect.bisect_left(seqs, seq) - 1 + got = [] + for t in log.split('\n'): + if not NB.search(t): + continue + i = take(t.rstrip(), prev) + if i is None: + unmatched += 1 + continue + used[i] = 1 + got.append(i) + prev = i + out_of_order += any(got[k] > got[k + 1] for k in range(len(got) - 1)) + if len({ent[i][2] for i in got}) > 1: + cross += 1 + if len(examples) < 5: + examples.append({'record_seq': seq, 'filed_under': c, 'lines': [{'seq': ent[i][0], 'container': ent[i][2]} for i in got]}) + return cross, unmatched, out_of_order, examples, used + + +def run_based(recs, src, N): + n = len(src) + nonblank = [sum(1 for l in r['log'].split('\n') if NB.search(l)) for r in src] + cont = [r['container_name'].lstrip('/') for r in src] + rs = sorted((s, (ln or 0)) for s, _, _, ln in recs) + spanning, mismatched = 0, 0 + for k, (s, ln) in enumerate(rs): + nxt = rs[k + 1][0] if k + 1 < len(rs) else N + 1 + run = range(s, nxt) + if sum(nonblank[(x - 1) % n] for x in run) != ln: + mismatched += 1 + if len({cont[(x - 1) % n] for x in run if nonblank[(x - 1) % n]}) > 1: + spanning += 1 + return spanning, mismatched + + +def es_side(R): + p = os.path.join(R, 'delivery', 'a.tsv.gz') + if not os.path.exists(p): + return None + docs = numbered = lines = 0 + for l in gzip.open(p, 'rt'): + seq, c, ln, route, index = l.rstrip('\n').split('\t') + docs += 1 + if seq: + numbered += 1 + lines += int(ln) if ln not in ('', 'None') else 0 + return {'documents': docs, 'numbered_documents': numbered, 'summed_lines': lines} + + +def main(): + self_test = sys.argv[1] == '--self-test' + R = sys.argv[2] if self_test else sys.argv[1] + src, final, recs, own = load(R) + N = final or max(s for s, *_ in recs) + ent = sent_lines(src, N) + if self_test: + # the same record seqs, each holding every sent line from its seq to the next record's seq + heads = sorted({s for s, *_ in recs}) + by_seq = collections.defaultdict(list) + for s, t, c in ent: + by_seq[s].append(t) + n = len(src) + fake = [] + for k, s in enumerate(heads): + nxt = heads[k + 1] if k + 1 < len(heads) else N + 1 + lines = [t for x in range(s, nxt) for t in by_seq.get(x, [])] + fake.append((s, src[(s - 1) % n]['container_name'].lstrip('/'), '\n'.join(lines), len(lines))) + cross, unmatched, ooo, ex, used = score(ent, fake, src, N) + spanning, mism = run_based(fake, src, N) + before = sum(1 for s, *_ in ent if s < heads[0]) + missing = len(ent) - sum(used) + ok = cross == spanning and cross > 0 and unmatched == 0 and missing == before + print(json.dumps({'self_test': 'PASS' if ok else 'FAIL', 'arrival_order_records': len(fake), 'cross_container_by_lines': cross, + 'run_based_count': spanning, 'unmatched': unmatched, 'missing': missing, 'lines_before_first_record': before})) + sys.exit(0 if ok else 1) + cross, unmatched, ooo, examples, used = score(ent, recs, src, N) + spanning, mism = run_based(recs, src, N) + missing = len(ent) - sum(used) + out = {'feed_final_seq': final, 'records': len(recs), 'receiver_own_messages': own, 'cross_container_records': cross, + 'nonblank_lines_sent': len(ent), 'lines_matched': sum(used), 'lines_missing': missing, 'lines_unmatched': unmatched, + 'records_out_of_feed_order': ooo, + 'readme_run_based_count': spanning, 'readme_runs_mismatched': mism, + 'elasticsearch': es_side(R), 'examples': examples} + out['verdict'] = 'PASS' if not (cross or missing or unmatched) else 'FAIL' + json.dump(out, open(os.path.join(R, 'score-e103.json'), 'w'), indent=1) + print(json.dumps({k: v for k, v in out.items() if k != 'examples'}, indent=1)) + sys.exit(0 if out['verdict'] == 'PASS' else 1) + + +if __name__ == '__main__': + main() From f9a3e6c84fa190c5983e22eab6f91d68cdab0a84 Mon Sep 17 00:00:00 2001 From: Tal Weiss <73443663+talwgx@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:38:16 -0400 Subject: [PATCH 2/2] elastic-hot-tier-budget: E103 fix on the two-arm smoke, arm A, 0 cross-container records Engine 0cd458f0f with modules 6c69d90a (local/edge-10x:e103, TENX_JAVA_HEAP=320M), the 2026-10-24 smoke's schedule and feed, arm A alone: 79,415 records, none holding lines from more than one container; all 101,637 non-blank lines fed are in exactly one record; Elasticsearch holds 79,416 documents summing to 101,637 lines. score-e103.py counts by lines; its self-test checks both groupings on the run's feed. Co-Authored-By: Claude Opus 5.5 --- elastic-hot-tier-budget/README.md | 25 ++ .../results-e103-smoke/arm-b-rule.json | 232 +++++++++++++++ .../budget-runs/20261026T001446Z/actions.csv | 2 + .../budget-runs/20261026T001446Z/caps.csv | 2 + .../budget-runs/20261026T001446Z/commit.json | 1 + .../20261026T001446Z/config-generation.csv | 2 + .../budget-runs/20261026T001446Z/exit | 1 + .../budget-runs/20261026T001446Z/latest.md | 0 .../budget-runs/20261026T001446Z/report.txt | 54 ++++ .../budget-runs/20261026T001446Z/run.json | 1 + .../budget-runs/20261026T001446Z/totals.csv | 2 + .../budget-runs/20261026T001452Z/actions.csv | 31 ++ .../budget-runs/20261026T001452Z/caps.csv | 31 ++ .../budget-runs/20261026T001452Z/commit.diff | 171 +++++++++++ .../budget-runs/20261026T001452Z/commit.json | 1 + .../20261026T001452Z/config-generation.csv | 2 + .../budget-runs/20261026T001452Z/exit | 1 + .../budget-runs/20261026T001452Z/latest.md | 46 +++ .../budget-runs/20261026T001452Z/report.txt | 55 ++++ .../budget-runs/20261026T001452Z/run.json | 1 + .../budget-runs/20261026T001452Z/totals.csv | 31 ++ .../budget-runs/20261026T001458Z/actions.csv | 31 ++ .../budget-runs/20261026T001458Z/caps.csv | 31 ++ .../budget-runs/20261026T001458Z/commit.diff | 153 ++++++++++ .../budget-runs/20261026T001458Z/commit.json | 1 + .../20261026T001458Z/config-generation.csv | 2 + .../budget-runs/20261026T001458Z/exit | 1 + .../budget-runs/20261026T001458Z/latest.md | 46 +++ .../budget-runs/20261026T001458Z/report.txt | 55 ++++ .../budget-runs/20261026T001458Z/run.json | 1 + .../budget-runs/20261026T001458Z/totals.csv | 31 ++ .../budget-runs/20261026T001509Z/actions.csv | 31 ++ .../budget-runs/20261026T001509Z/caps.csv | 31 ++ .../budget-runs/20261026T001509Z/commit.diff | 153 ++++++++++ .../budget-runs/20261026T001509Z/commit.json | 1 + .../20261026T001509Z/config-generation.csv | 2 + .../budget-runs/20261026T001509Z/exit | 1 + .../budget-runs/20261026T001509Z/latest.md | 46 +++ .../budget-runs/20261026T001509Z/report.txt | 55 ++++ .../budget-runs/20261026T001509Z/run.json | 1 + .../budget-runs/20261026T001509Z/totals.csv | 31 ++ .../budget-runs/20261026T001520Z/actions.csv | 31 ++ .../budget-runs/20261026T001520Z/caps.csv | 31 ++ .../budget-runs/20261026T001520Z/commit.diff | 153 ++++++++++ .../budget-runs/20261026T001520Z/commit.json | 1 + .../20261026T001520Z/config-generation.csv | 2 + .../budget-runs/20261026T001520Z/exit | 1 + .../budget-runs/20261026T001520Z/latest.md | 46 +++ .../budget-runs/20261026T001520Z/report.txt | 55 ++++ .../budget-runs/20261026T001520Z/run.json | 1 + .../budget-runs/20261026T001520Z/totals.csv | 31 ++ .../budget-runs/20261026T001609Z/actions.csv | 38 +++ .../budget-runs/20261026T001609Z/caps.csv | 38 +++ .../budget-runs/20261026T001609Z/commit.diff | 226 +++++++++++++++ .../budget-runs/20261026T001609Z/commit.json | 1 + .../20261026T001609Z/config-generation.csv | 2 + .../budget-runs/20261026T001609Z/exit | 1 + .../budget-runs/20261026T001609Z/latest.md | 53 ++++ .../budget-runs/20261026T001609Z/report.txt | 62 ++++ .../budget-runs/20261026T001609Z/run.json | 1 + .../budget-runs/20261026T001609Z/totals.csv | 38 +++ .../budget-runs/20261026T001709Z/actions.csv | 38 +++ .../budget-runs/20261026T001709Z/caps.csv | 38 +++ .../budget-runs/20261026T001709Z/commit.diff | 183 ++++++++++++ .../budget-runs/20261026T001709Z/commit.json | 1 + .../20261026T001709Z/config-generation.csv | 2 + .../budget-runs/20261026T001709Z/exit | 1 + .../budget-runs/20261026T001709Z/latest.md | 54 ++++ .../budget-runs/20261026T001709Z/report.txt | 63 ++++ .../budget-runs/20261026T001709Z/run.json | 1 + .../budget-runs/20261026T001709Z/totals.csv | 38 +++ .../budget-runs/20261026T001808Z/actions.csv | 38 +++ .../budget-runs/20261026T001808Z/caps.csv | 38 +++ .../budget-runs/20261026T001808Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T001808Z/commit.json | 1 + .../20261026T001808Z/config-generation.csv | 2 + .../budget-runs/20261026T001808Z/exit | 1 + .../budget-runs/20261026T001808Z/latest.md | 54 ++++ .../budget-runs/20261026T001808Z/report.txt | 63 ++++ .../budget-runs/20261026T001808Z/run.json | 1 + .../budget-runs/20261026T001808Z/totals.csv | 38 +++ .../budget-runs/20261026T001908Z/actions.csv | 38 +++ .../budget-runs/20261026T001908Z/caps.csv | 38 +++ .../budget-runs/20261026T001908Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T001908Z/commit.json | 1 + .../20261026T001908Z/config-generation.csv | 2 + .../budget-runs/20261026T001908Z/exit | 1 + .../budget-runs/20261026T001908Z/latest.md | 54 ++++ .../budget-runs/20261026T001908Z/report.txt | 63 ++++ .../budget-runs/20261026T001908Z/run.json | 1 + .../budget-runs/20261026T001908Z/totals.csv | 38 +++ .../budget-runs/20261026T002009Z/actions.csv | 38 +++ .../budget-runs/20261026T002009Z/caps.csv | 38 +++ .../budget-runs/20261026T002009Z/commit.diff | 183 ++++++++++++ .../budget-runs/20261026T002009Z/commit.json | 1 + .../20261026T002009Z/config-generation.csv | 2 + .../budget-runs/20261026T002009Z/exit | 1 + .../budget-runs/20261026T002009Z/latest.md | 54 ++++ .../budget-runs/20261026T002009Z/report.txt | 63 ++++ .../budget-runs/20261026T002009Z/run.json | 1 + .../budget-runs/20261026T002009Z/totals.csv | 38 +++ .../budget-runs/20261026T002108Z/actions.csv | 38 +++ .../budget-runs/20261026T002108Z/caps.csv | 38 +++ .../budget-runs/20261026T002108Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T002108Z/commit.json | 1 + .../20261026T002108Z/config-generation.csv | 2 + .../budget-runs/20261026T002108Z/exit | 1 + .../budget-runs/20261026T002108Z/latest.md | 54 ++++ .../budget-runs/20261026T002108Z/report.txt | 63 ++++ .../budget-runs/20261026T002108Z/run.json | 1 + .../budget-runs/20261026T002108Z/totals.csv | 38 +++ .../budget-runs/20261026T002208Z/actions.csv | 38 +++ .../budget-runs/20261026T002208Z/caps.csv | 38 +++ .../budget-runs/20261026T002208Z/commit.diff | 183 ++++++++++++ .../budget-runs/20261026T002208Z/commit.json | 1 + .../20261026T002208Z/config-generation.csv | 2 + .../budget-runs/20261026T002208Z/exit | 1 + .../budget-runs/20261026T002208Z/latest.md | 54 ++++ .../budget-runs/20261026T002208Z/report.txt | 63 ++++ .../budget-runs/20261026T002208Z/run.json | 1 + .../budget-runs/20261026T002208Z/totals.csv | 38 +++ .../budget-runs/20261026T002313Z/actions.csv | 38 +++ .../budget-runs/20261026T002313Z/caps.csv | 38 +++ .../budget-runs/20261026T002313Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T002313Z/commit.json | 1 + .../20261026T002313Z/config-generation.csv | 2 + .../budget-runs/20261026T002313Z/exit | 1 + .../budget-runs/20261026T002313Z/latest.md | 54 ++++ .../budget-runs/20261026T002313Z/report.txt | 63 ++++ .../budget-runs/20261026T002313Z/run.json | 1 + .../budget-runs/20261026T002313Z/totals.csv | 38 +++ .../budget-runs/20261026T002412Z/actions.csv | 38 +++ .../budget-runs/20261026T002412Z/caps.csv | 38 +++ .../budget-runs/20261026T002412Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T002412Z/commit.json | 1 + .../20261026T002412Z/config-generation.csv | 2 + .../budget-runs/20261026T002412Z/exit | 1 + .../budget-runs/20261026T002412Z/latest.md | 54 ++++ .../budget-runs/20261026T002412Z/report.txt | 63 ++++ .../budget-runs/20261026T002412Z/run.json | 1 + .../budget-runs/20261026T002412Z/totals.csv | 38 +++ .../budget-runs/20261026T002510Z/actions.csv | 38 +++ .../budget-runs/20261026T002510Z/caps.csv | 38 +++ .../budget-runs/20261026T002510Z/commit.diff | 181 ++++++++++++ .../budget-runs/20261026T002510Z/commit.json | 1 + .../20261026T002510Z/config-generation.csv | 2 + .../budget-runs/20261026T002510Z/exit | 1 + .../budget-runs/20261026T002510Z/latest.md | 54 ++++ .../budget-runs/20261026T002510Z/report.txt | 63 ++++ .../budget-runs/20261026T002510Z/run.json | 1 + .../budget-runs/20261026T002510Z/totals.csv | 38 +++ .../budget-runs/20261026T002609Z/actions.csv | 38 +++ .../budget-runs/20261026T002609Z/caps.csv | 38 +++ .../budget-runs/20261026T002609Z/commit.diff | 182 ++++++++++++ .../budget-runs/20261026T002609Z/commit.json | 1 + .../20261026T002609Z/config-generation.csv | 2 + .../budget-runs/20261026T002609Z/exit | 1 + .../budget-runs/20261026T002609Z/latest.md | 54 ++++ .../budget-runs/20261026T002609Z/report.txt | 63 ++++ .../budget-runs/20261026T002609Z/run.json | 1 + .../budget-runs/20261026T002609Z/totals.csv | 38 +++ .../budget-runs/20261026T002712Z/actions.csv | 38 +++ .../budget-runs/20261026T002712Z/caps.csv | 38 +++ .../budget-runs/20261026T002712Z/commit.diff | 183 ++++++++++++ .../budget-runs/20261026T002712Z/commit.json | 1 + .../20261026T002712Z/config-generation.csv | 2 + .../budget-runs/20261026T002712Z/exit | 1 + .../budget-runs/20261026T002712Z/latest.md | 54 ++++ .../budget-runs/20261026T002712Z/report.txt | 63 ++++ .../budget-runs/20261026T002712Z/run.json | 1 + .../budget-runs/20261026T002712Z/totals.csv | 38 +++ .../budget-runs/20261026T002811Z/actions.csv | 38 +++ .../budget-runs/20261026T002811Z/caps.csv | 38 +++ .../budget-runs/20261026T002811Z/commit.diff | 181 ++++++++++++ .../budget-runs/20261026T002811Z/commit.json | 1 + .../20261026T002811Z/config-generation.csv | 2 + .../budget-runs/20261026T002811Z/exit | 1 + .../budget-runs/20261026T002811Z/latest.md | 54 ++++ .../budget-runs/20261026T002811Z/report.txt | 63 ++++ .../budget-runs/20261026T002811Z/run.json | 1 + .../budget-runs/20261026T002811Z/totals.csv | 38 +++ .../budget-runs/20261026T002909Z/actions.csv | 38 +++ .../budget-runs/20261026T002909Z/caps.csv | 38 +++ .../budget-runs/20261026T002909Z/commit.diff | 271 ++++++++++++++++++ .../budget-runs/20261026T002909Z/commit.json | 1 + .../20261026T002909Z/config-generation.csv | 2 + .../budget-runs/20261026T002909Z/exit | 1 + .../budget-runs/20261026T002909Z/latest.md | 52 ++++ .../budget-runs/20261026T002909Z/report.txt | 61 ++++ .../budget-runs/20261026T002909Z/run.json | 1 + .../budget-runs/20261026T002909Z/totals.csv | 38 +++ .../budget-runs/20261026T003008Z/actions.csv | 38 +++ .../budget-runs/20261026T003008Z/caps.csv | 38 +++ .../budget-runs/20261026T003008Z/commit.diff | 268 +++++++++++++++++ .../budget-runs/20261026T003008Z/commit.json | 1 + .../20261026T003008Z/config-generation.csv | 2 + .../budget-runs/20261026T003008Z/exit | 1 + .../budget-runs/20261026T003008Z/latest.md | 52 ++++ .../budget-runs/20261026T003008Z/report.txt | 61 ++++ .../budget-runs/20261026T003008Z/run.json | 1 + .../budget-runs/20261026T003008Z/totals.csv | 38 +++ .../budget-runs/20261026T003112Z/actions.csv | 38 +++ .../budget-runs/20261026T003112Z/caps.csv | 38 +++ .../budget-runs/20261026T003112Z/commit.diff | 268 +++++++++++++++++ .../budget-runs/20261026T003112Z/commit.json | 1 + .../20261026T003112Z/config-generation.csv | 2 + .../budget-runs/20261026T003112Z/exit | 1 + .../budget-runs/20261026T003112Z/latest.md | 52 ++++ .../budget-runs/20261026T003112Z/report.txt | 61 ++++ .../budget-runs/20261026T003112Z/run.json | 1 + .../budget-runs/20261026T003112Z/totals.csv | 38 +++ .../budget-runs/20261026T003210Z/actions.csv | 38 +++ .../budget-runs/20261026T003210Z/caps.csv | 38 +++ .../budget-runs/20261026T003210Z/commit.diff | 268 +++++++++++++++++ .../budget-runs/20261026T003210Z/commit.json | 1 + .../20261026T003210Z/config-generation.csv | 2 + .../budget-runs/20261026T003210Z/exit | 1 + .../budget-runs/20261026T003210Z/latest.md | 52 ++++ .../budget-runs/20261026T003210Z/report.txt | 61 ++++ .../budget-runs/20261026T003210Z/run.json | 1 + .../budget-runs/20261026T003210Z/totals.csv | 38 +++ .../budget-runs/20261026T003309Z/actions.csv | 38 +++ .../budget-runs/20261026T003309Z/caps.csv | 38 +++ .../budget-runs/20261026T003309Z/commit.diff | 268 +++++++++++++++++ .../budget-runs/20261026T003309Z/commit.json | 1 + .../20261026T003309Z/config-generation.csv | 2 + .../budget-runs/20261026T003309Z/exit | 1 + .../budget-runs/20261026T003309Z/latest.md | 52 ++++ .../budget-runs/20261026T003309Z/report.txt | 61 ++++ .../budget-runs/20261026T003309Z/run.json | 1 + .../budget-runs/20261026T003309Z/totals.csv | 38 +++ .../budget-runs/20261026T003410Z/actions.csv | 38 +++ .../budget-runs/20261026T003410Z/caps.csv | 38 +++ .../budget-runs/20261026T003410Z/commit.diff | 268 +++++++++++++++++ .../budget-runs/20261026T003410Z/commit.json | 1 + .../20261026T003410Z/config-generation.csv | 2 + .../budget-runs/20261026T003410Z/exit | 1 + .../budget-runs/20261026T003410Z/latest.md | 52 ++++ .../budget-runs/20261026T003410Z/report.txt | 61 ++++ .../budget-runs/20261026T003410Z/run.json | 1 + .../budget-runs/20261026T003410Z/totals.csv | 38 +++ .../budget-runs/20261026T003509Z/actions.csv | 38 +++ .../budget-runs/20261026T003509Z/caps.csv | 38 +++ .../budget-runs/20261026T003509Z/commit.diff | 266 +++++++++++++++++ .../budget-runs/20261026T003509Z/commit.json | 1 + .../20261026T003509Z/config-generation.csv | 2 + .../budget-runs/20261026T003509Z/exit | 1 + .../budget-runs/20261026T003509Z/latest.md | 52 ++++ .../budget-runs/20261026T003509Z/report.txt | 61 ++++ .../budget-runs/20261026T003509Z/run.json | 1 + .../budget-runs/20261026T003509Z/totals.csv | 38 +++ .../results-e103-smoke/build.json | 52 ++++ .../results-e103-smoke/data/returned.jsonl.gz | Bin 0 -> 3484256 bytes .../results-e103-smoke/delivery/a.json | 1 + .../results-e103-smoke/delivery/a.tsv.gz | Bin 0 -> 250047 bytes .../delivery/aliases-9200.json | 1 + .../delivery/cat-indices-9200.json | 1 + .../results-e103-smoke/es-setup/es-setup.json | 79 +++++ .../results-e103-smoke/es-setup/recipe.txt | 81 ++++++ .../fluent-bit/fluent-bit.conf | 138 +++++++++ .../results-e103-smoke/fluent-bit/rig.lua | 46 +++ .../results-e103-smoke/fluentbit-metrics.json | 1 + .../results-e103-smoke/hb-tenx.log | 51 ++++ .../results-e103-smoke/meter.jsonl.gz | Bin 0 -> 2949 bytes .../results-e103-smoke/policy.yaml | 71 +++++ .../results-e103-smoke/score-e103.json | 20 ++ .../results-e103-smoke/timeline.jsonl | 45 +++ .../values/compose.receiver.yaml | 28 ++ .../results-e103-smoke/values/launch.json | 58 ++++ .../values/receiver-values.json | 20 ++ .../results-e103-smoke/values/render.out | 27 ++ .../results-e103-smoke/values/seed.sh | 17 ++ .../results-e103-smoke/values/values.yaml | 109 +++++++ elastic-hot-tier-budget/rig/score-e103.py | 53 ++-- 274 files changed, 11607 insertions(+), 19 deletions(-) create mode 100644 elastic-hot-tier-budget/results-e103-smoke/arm-b-rule.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/actions.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/caps.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.diff create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/config-generation.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/exit create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/latest.md create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/report.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/run.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/totals.csv create mode 100644 elastic-hot-tier-budget/results-e103-smoke/build.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/data/returned.jsonl.gz create mode 100644 elastic-hot-tier-budget/results-e103-smoke/delivery/a.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/delivery/a.tsv.gz create mode 100644 elastic-hot-tier-budget/results-e103-smoke/delivery/aliases-9200.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/delivery/cat-indices-9200.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/es-setup/es-setup.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/es-setup/recipe.txt create mode 100644 elastic-hot-tier-budget/results-e103-smoke/fluent-bit/fluent-bit.conf create mode 100644 elastic-hot-tier-budget/results-e103-smoke/fluent-bit/rig.lua create mode 100644 elastic-hot-tier-budget/results-e103-smoke/fluentbit-metrics.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/hb-tenx.log create mode 100644 elastic-hot-tier-budget/results-e103-smoke/meter.jsonl.gz create mode 100644 elastic-hot-tier-budget/results-e103-smoke/policy.yaml create mode 100644 elastic-hot-tier-budget/results-e103-smoke/score-e103.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/timeline.jsonl create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/compose.receiver.yaml create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/launch.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/receiver-values.json create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/render.out create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/seed.sh create mode 100644 elastic-hot-tier-budget/results-e103-smoke/values/values.yaml diff --git a/elastic-hot-tier-budget/README.md b/elastic-hot-tier-budget/README.md index d2b98ea..9c2a8d5 100644 --- a/elastic-hot-tier-budget/README.md +++ b/elastic-hot-tier-budget/README.md @@ -160,3 +160,28 @@ Warm peaked at 20.7 MB in arm A (08:34:51) and 9.1 MB in arm B (08:33:11). Each **Rig additions.** `compose.warm.yaml`, `phases-two-arm-warm.sh` (the 2026-10-24 schedule with warm placement; containers and volumes removed before and after), `es-setup.mjs` and `es-setup-b.mjs` (`TD_PLACEMENT=warm` renders the recipe with the option and checks each bootstrap index sits on a warm node), `meter.py` (each shard's node from `_cat/shards`: per stream, store on hot and on warm; per arm, the warm node's store), `score-two-arm.py` (the warm lines beside the unchanged criteria), `run.sh clean`. Not shown: the cost of a warm tier, a measured Elastic Cloud bill, 300 nodes, compact, autoscaling, or a hold longer than the hot retention. + +## Grouping across containers on the E103 fix, arm A, 2026-10-26 + +The question: on the rig where the defect was found, does the E103 fix return any record holding lines from more than one container? The two-arm smoke's schedule (every phase at a tenth of its length, the dry run at 240 seconds) ran for arm A alone from 00:10 to 00:36 UTC. Results are in `results-e103-smoke/`. + +The engine is commit `0cd458f0f` (log-10x/engine, branch `fix/e103-sequence-key`) with modules commit `6c69d90a` (log-10x/modules, same branch). They ran in the image `local/edge-10x:e103` (sha256:8f74b8bbec2e…), which runs the engine jar on a JVM, so the Receiver had `TENX_JAVA_HEAP=320M` inside its rendered 512 MB limit. Everything else is the 2026-10-24 smoke: the same feed (sha256 24e02233a797…), log10x-mcp 1.30.84 (d6fa2b1), the same ILM policies and the same policy branch. + +**Result: no cross-container record, and delivery is exact.** + +| Count | Value | +|---|---:| +| Lines fed, by seq | 101,663 | +| Non-blank lines fed | 101,637 | +| Records returned | 79,415, plus the Receiver's connect message | +| Records holding lines from more than one container | 0 | +| Non-blank lines missing (sent, in no record) | 0 | +| Lines duplicated or unmatched (returned, no unused sent line) | 0 | +| Records with lines out of feed order | 0 | +| Elasticsearch documents (`tenx-app`, `tenx-tierdown`) | 79,416, with line counts summing to 101,637 | + +**How the count is made.** Fluent Bit keeps every returned record whole in this run. `score-e103.py` matches each record's lines to the lines sent and counts the records whose lines came from more than one container. The 2026-10-24 count (71 of 848,190, and 11 of 78,852 in that day's smoke) treated each record as the run of seqs up to the next record's seq. That holds only while lines are grouped in arrival order. Here it reads 0, with 2 records whose runs do not match their line counts. The scorer's self-test groups the run's feed with one head rule both ways. In arrival order it finds 4,333 cross-container records by lines and the same 4,333 by the run-based count. Per container it finds none by lines, while the run-based count reports 4,322. + +In this run, kafka's four startup lines (seq 2751 to 2754) came back as four kafka records, one line each. The jaeger record at seq 2750 holds only its own line. + +**Rig additions.** `ARM_A_ONLY=1` in `phases-two-arm.sh` runs arm A alone: no cluster B, no copy to it, and every returned record written whole to `data/returned.jsonl`. `gen-receiver-values.mjs` passes `TENX_JAVA_HEAP` to the Receiver. `score-e103.py` makes the count above. diff --git a/elastic-hot-tier-budget/results-e103-smoke/arm-b-rule.json b/elastic-hot-tier-budget/results-e103-smoke/arm-b-rule.json new file mode 100644 index 0000000..099e6d0 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/arm-b-rule.json @@ -0,0 +1,232 @@ +{ + "source": "results-two-arm/replay/source.jsonl", + "speed": 8.0, + "minutes": 20.0, + "source_seconds": 9600.0, + "lines": 67200, + "bytes": 13282731, + "top_half": [ + "opentelemetry-collector" + ], + "top_half_bytes": 9149163, + "top_half_share": 0.6888, + "regex": "^(opentelemetry-collector)$", + "services": [ + { + "service": "opentelemetry-collector", + "bytes": 9149163, + "lines": 32427, + "share": 0.6888 + }, + { + "service": "kafka", + "bytes": 1891441, + "lines": 10216, + "share": 0.1424 + }, + { + "service": "cart", + "bytes": 718696, + "lines": 12130, + "share": 0.0541 + }, + { + "service": "ad", + "bytes": 353362, + "lines": 2180, + "share": 0.0266 + }, + { + "service": "recommendation", + "bytes": 317242, + "lines": 1034, + "share": 0.0239 + }, + { + "service": "frontend", + "bytes": 292949, + "lines": 4934, + "share": 0.0221 + }, + { + "service": "grafana", + "bytes": 292610, + "lines": 1861, + "share": 0.022 + }, + { + "service": "fluentd-10x", + "bytes": 85930, + "lines": 641, + "share": 0.0065 + }, + { + "service": "opensearch", + "bytes": 49164, + "lines": 363, + "share": 0.0037 + }, + { + "service": "kube-proxy", + "bytes": 28157, + "lines": 245, + "share": 0.0021 + }, + { + "service": "frontend-proxy", + "bytes": 27512, + "lines": 121, + "share": 0.0021 + }, + { + "service": "jaeger", + "bytes": 17627, + "lines": 87, + "share": 0.0013 + }, + { + "service": "valkey-cart", + "bytes": 13212, + "lines": 192, + "share": 0.001 + }, + { + "service": "prometheus-server", + "bytes": 10711, + "lines": 67, + "share": 0.0008 + }, + { + "service": "metrics-server", + "bytes": 5148, + "lines": 35, + "share": 0.0004 + }, + { + "service": "coredns", + "bytes": 4099, + "lines": 49, + "share": 0.0003 + }, + { + "service": "accounting", + "bytes": 3653, + "lines": 76, + "share": 0.0003 + }, + { + "service": "postgresql", + "bytes": 3543, + "lines": 64, + "share": 0.0003 + }, + { + "service": "load-generator", + "bytes": 2640, + "lines": 45, + "share": 0.0002 + }, + { + "service": "wait-for-kafka", + "bytes": 2592, + "lines": 150, + "share": 0.0002 + }, + { + "service": "init-config", + "bytes": 2565, + "lines": 110, + "share": 0.0002 + }, + { + "service": "grafana-sc-dashboard", + "bytes": 1862, + "lines": 14, + "share": 0.0001 + }, + { + "service": "grafana-sc-alerts", + "bytes": 1327, + "lines": 10, + "share": 0.0001 + }, + { + "service": "flagd", + "bytes": 1322, + "lines": 16, + "share": 0.0001 + }, + { + "service": "grafana-sc-datasources", + "bytes": 1322, + "lines": 10, + "share": 0.0001 + }, + { + "service": "payment", + "bytes": 1104, + "lines": 34, + "share": 0.0001 + }, + { + "service": "email", + "bytes": 766, + "lines": 13, + "share": 0.0001 + }, + { + "service": "image-provider", + "bytes": 650, + "lines": 40, + "share": 0.0 + }, + { + "service": "aws-vpc-cni-init", + "bytes": 556, + "lines": 7, + "share": 0.0 + }, + { + "service": "fraud-detection", + "bytes": 543, + "lines": 6, + "share": 0.0 + }, + { + "service": "aws-node", + "bytes": 388, + "lines": 6, + "share": 0.0 + }, + { + "service": "wait-for-valkey-cart", + "bytes": 268, + "lines": 11, + "share": 0.0 + }, + { + "service": "currency", + "bytes": 265, + "lines": 1, + "share": 0.0 + }, + { + "service": "flagd-ui", + "bytes": 194, + "lines": 3, + "share": 0.0 + }, + { + "service": "aws-eks-nodeagent", + "bytes": 122, + "lines": 1, + "share": 0.0 + }, + { + "service": "quote", + "bytes": 26, + "lines": 1, + "share": 0.0 + } + ] +} \ No newline at end of file diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/actions.csv new file mode 100644 index 0000000..b86a442 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/actions.csv @@ -0,0 +1,2 @@ +container,action +tenx-seed,pass::install seed diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/caps.csv new file mode 100644 index 0000000..e74fc03 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/caps.csv @@ -0,0 +1,2 @@ +container,cap +tenx-seed,1::install seed diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/commit.json new file mode 100644 index 0000000..68acd18 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/commit.json @@ -0,0 +1 @@ +{"before":"78c5eea4ed9fd3c0b1fef9757f4904e9284207d1","after":"78c5eea4ed9fd3c0b1fef9757f4904e9284207d1","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/config-generation.csv new file mode 100644 index 0000000..cc83fe1 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,seed diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/latest.md new file mode 100644 index 0000000..e69de29 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/report.txt new file mode 100644 index 0000000..7762ce1 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/report.txt @@ -0,0 +1,54 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp [DRY RUN] +[tenx-recur] Hot tier: 1 MB of 1000 GB (1000 GB set in the policy) on 1 hot node; at these limits it settles at about 58 MB within 2 hours, with 0 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 1 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 0.88 bytes of store kept, 0.88 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 784 MB a day, under the 13589 GB a day that fits the size; every statement keeps its lines, with room to grow 2.0 times. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 597 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:14:47.000Z + +Hot tier: 1 MB of 1000 GB (1000 GB set in the policy) on 1 hot node; at these limits it settles at about 58 MB within 2 hours, with 0 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 1 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 0.88 bytes of store kept, 0.88 as tier_down (measured on the indices on hot). +- The Receiver's statements send 784 MB a day, under the 13589 GB a day that fits the size; every statement keeps its lines, with room to grow 2.0 times. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 597 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 8 MB | 16 MB | 4359 | 43432 | +| ad | the frozen tier | 1 | 10 MB | 20 MB | 25377 | 56529 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 832 | 832 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 748 | 3948 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 2 MB | 761 | 5026 | +| cart | the frozen tier | 1 | 19 MB | 37 MB | 63511 | 104041 | +| coredns | the frozen tier | 1 | 6 MB | 11 MB | 12287 | 31658 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1186 | 1186 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1705 | 3458 | +| flagd | the frozen tier | 1 | 2 MB | 4 MB | 959 | 11159 | +| flagd-ui | the frozen tier | 1 | 0 MB | 1 MB | 706 | 1974 | +| fraud-detection | the frozen tier | 1 | 1 MB | 1 MB | 1386 | 2949 | +| frontend | the frozen tier | 1 | 5 MB | 10 MB | 20593 | 27902 | +| frontend-proxy | the frozen tier | 1 | 23 MB | 46 MB | 6613 | 129136 | +| grafana | the frozen tier | 1 | 251 MB | 502 MB | 6064 | 1395753 | +| grafana-sc-alerts | the frozen tier | 1 | 2 MB | 3 MB | 1056 | 8637 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 4 MB | 2150 | 12214 | +| grafana-sc-datasources | the frozen tier | 1 | 2 MB | 3 MB | 1085 | 8756 | +| image-provider | the frozen tier | 1 | 4 MB | 8 MB | 4554 | 21955 | +| init-config | the frozen tier | 1 | 1 MB | 3 MB | 7256 | 7256 | +| jaeger | the frozen tier | 1 | 14 MB | 27 MB | 4992 | 76313 | +| kafka | the frozen tier | 1 | 125 MB | 251 MB | 59246 | 696146 | +| kube-proxy | the frozen tier | 1 | 33 MB | 65 MB | 44101 | 180621 | +| load-generator | the frozen tier | 1 | 2 MB | 4 MB | 9159 | 9994 | +| metrics-server | the frozen tier | 1 | 6 MB | 11 MB | 4501 | 31281 | +| opensearch | the frozen tier | 1 | 43 MB | 86 MB | 11605 | 237669 | +| opentelemetry-collector | the frozen tier | 1 | 209 MB | 417 MB | 524270 | 1159227 | +| wait-for-kafka | the frozen tier | 1 | 15 MB | 30 MB | 80530 | 82286 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 2 MB | 5798 | 6418 | +| `*` (any other service) | the frozen tier | 1 | | 13588 GB | 37744131243 | 37744131243 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/run.json new file mode 100644 index 0000000..058621d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:14:51.625Z","status":"dry_run","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"dry-run: Hot tier: 1 MB of 1000 GB (1000 GB set in the policy) on 1 hot node; at these limits it settles at about 58 MB within 2 hours, with 0 MB a day of counted lines moved to the frozen tier."} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/totals.csv new file mode 100644 index 0000000..6d41912 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001446Z/totals.csv @@ -0,0 +1,2 @@ +container,total +tenx-seed,1::install seed diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/actions.csv new file mode 100644 index 0000000..69b7e87 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/actions.csv @@ -0,0 +1,31 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/caps.csv new file mode 100644 index 0000000..d0e571c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/caps.csv @@ -0,0 +1,31 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.diff new file mode 100644 index 0000000..28f1e80 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.diff @@ -0,0 +1,171 @@ +diff --git a/log10x/policy/actions.csv b/log10x/policy/actions.csv +index b86a442..69b7e87 100644 +--- a/log10x/policy/actions.csv ++++ b/log10x/policy/actions.csv +@@ -1,2 +1,31 @@ + container,action +-tenx-seed,pass::install seed ++accounting,tier_down::budget run ++ad,tier_down::budget run ++aws-eks-nodeagent,tier_down::budget run ++aws-node,tier_down::budget run ++aws-vpc-cni-init,tier_down::budget run ++cart,tier_down::budget run ++coredns,tier_down::budget run ++currency,tier_down::budget run ++email,tier_down::budget run ++flagd,tier_down::budget run ++flagd-ui,tier_down::budget run ++fraud-detection,tier_down::budget run ++frontend,tier_down::budget run ++frontend-proxy,tier_down::budget run ++grafana,tier_down::budget run ++grafana-sc-alerts,tier_down::budget run ++grafana-sc-dashboard,tier_down::budget run ++grafana-sc-datasources,tier_down::budget run ++image-provider,tier_down::budget run ++init-config,tier_down::budget run ++jaeger,tier_down::budget run ++kafka,tier_down::budget run ++kube-proxy,tier_down::budget run ++load-generator,tier_down::budget run ++metrics-server,tier_down::budget run ++opensearch,tier_down::budget run ++opentelemetry-collector,tier_down::budget run ++wait-for-kafka,tier_down::budget run ++wait-for-valkey-cart,tier_down::budget run ++*,tier_down::budget run +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index e74fc03..d0e571c 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,2 +1,31 @@ + container,cap +-tenx-seed,1::install seed ++accounting,1::budget run ++ad,1::budget run ++aws-eks-nodeagent,1::budget run ++aws-node,1::budget run ++aws-vpc-cni-init,1::budget run ++cart,1::budget run ++coredns,1::budget run ++currency,1::budget run ++email,1::budget run ++flagd,1::budget run ++flagd-ui,1::budget run ++fraud-detection,1::budget run ++frontend,1::budget run ++frontend-proxy,1::budget run ++grafana,1::budget run ++grafana-sc-alerts,1::budget run ++grafana-sc-dashboard,1::budget run ++grafana-sc-datasources,1::budget run ++image-provider,1::budget run ++init-config,1::budget run ++jaeger,1::budget run ++kafka,1::budget run ++kube-proxy,1::budget run ++load-generator,1::budget run ++metrics-server,1::budget run ++opensearch,1::budget run ++opentelemetry-collector,1::budget run ++wait-for-kafka,1::budget run ++wait-for-valkey-cart,1::budget run ++*,1::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index cc83fe1..ddb50d6 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,seed ++generation,88a2a5ef6083 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 6d41912..5ba2144 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,2 +1,31 @@ + container,total +-tenx-seed,1::install seed ++accounting,18023::budget run ++ad,7339::budget run ++aws-eks-nodeagent,405::budget run ++aws-node,1921::budget run ++aws-vpc-cni-init,2446::budget run ++cart,5928::budget run ++coredns,8044::budget run ++currency,577::budget run ++email,1682::budget run ++flagd,5430::budget run ++flagd-ui,960::budget run ++fraud-detection,1435::budget run ++frontend,13578::budget run ++frontend-proxy,62843::budget run ++grafana,676544::budget run ++grafana-sc-alerts,4203::budget run ++grafana-sc-dashboard,5943::budget run ++grafana-sc-datasources,4261::budget run ++image-provider,9150::budget run ++init-config,3531::budget run ++jaeger,37137::budget run ++kafka,135731::budget run ++kube-proxy,38945::budget run ++load-generator,4863::budget run ++metrics-server,15222::budget run ++opensearch,105815::budget run ++opentelemetry-collector,453312::budget run ++wait-for-kafka,1893::budget run ++wait-for-valkey-cart,1401::budget run ++*,5928::budget run +diff --git a/reports/latest.md b/reports/latest.md +new file mode 100644 +index 0000000..34cef3c +--- /dev/null ++++ b/reports/latest.md +@@ -0,0 +1,46 @@ ++# Hot-tier run: 2026-10-26T00:14:52.000Z ++ ++Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier. ++ ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. ++- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). ++- Each counted byte takes 1.03 bytes of store kept, 1.03 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 777 MB a day; 281 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 586 MB a day on hot whatever the limits; the size holds down to that floor. ++- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 586 MB a day on hot, more than the 281 MB a day that fits, so hot settles above 41 MB at about 67 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++ ++| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | ++|---|---|---|---|---|---|---| ++| accounting | the frozen tier | 1 | 8 MB | 6 MB | 1 | 18023 | ++| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7339 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 405 | ++| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1921 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2446 | ++| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5928 | ++| coredns | the frozen tier | 1 | 6 MB | 3 MB | 1 | 8044 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 577 | ++| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1682 | ++| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5430 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | ++| fraud-detection | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1435 | ++| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13578 | ++| frontend-proxy | the frozen tier | 1 | 23 MB | 23 MB | 1 | 62843 | ++| grafana | the frozen tier | 1 | 245 MB | 244 MB | 1 | 676544 | ++| grafana-sc-alerts | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4203 | ++| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5943 | ++| grafana-sc-datasources | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | ++| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 9150 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3531 | ++| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 37137 | ++| kafka | the frozen tier | 1 | 122 MB | 49 MB | 1 | 135731 | ++| kube-proxy | the frozen tier | 1 | 32 MB | 14 MB | 1 | 38945 | ++| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4863 | ++| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 15222 | ++| opensearch | the frozen tier | 1 | 42 MB | 38 MB | 1 | 105815 | ++| opentelemetry-collector | the frozen tier | 1 | 217 MB | 163 MB | 1 | 453312 | ++| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1893 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1401 | ++| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5928 | ++ ++Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.json new file mode 100644 index 0000000..2937a85 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/commit.json @@ -0,0 +1 @@ +{"before":"78c5eea4ed9fd3c0b1fef9757f4904e9284207d1","after":"afa4fe44ce9771c9dc07d8b99ae01c3444ab6d24","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/config-generation.csv new file mode 100644 index 0000000..ddb50d6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,88a2a5ef6083 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/latest.md new file mode 100644 index 0000000..34cef3c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/latest.md @@ -0,0 +1,46 @@ +# Hot-tier run: 2026-10-26T00:14:52.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.03 bytes of store kept, 1.03 as tier_down (measured on the indices on hot). +- The Receiver's statements send 777 MB a day; 281 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 586 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 586 MB a day on hot, more than the 281 MB a day that fits, so hot settles above 41 MB at about 67 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 8 MB | 6 MB | 1 | 18023 | +| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7339 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 405 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1921 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2446 | +| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5928 | +| coredns | the frozen tier | 1 | 6 MB | 3 MB | 1 | 8044 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 577 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1682 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5430 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +| fraud-detection | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1435 | +| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13578 | +| frontend-proxy | the frozen tier | 1 | 23 MB | 23 MB | 1 | 62843 | +| grafana | the frozen tier | 1 | 245 MB | 244 MB | 1 | 676544 | +| grafana-sc-alerts | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4203 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5943 | +| grafana-sc-datasources | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 9150 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3531 | +| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 37137 | +| kafka | the frozen tier | 1 | 122 MB | 49 MB | 1 | 135731 | +| kube-proxy | the frozen tier | 1 | 32 MB | 14 MB | 1 | 38945 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4863 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 15222 | +| opensearch | the frozen tier | 1 | 42 MB | 38 MB | 1 | 105815 | +| opentelemetry-collector | the frozen tier | 1 | 217 MB | 163 MB | 1 | 453312 | +| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1893 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1401 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5928 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/report.txt new file mode 100644 index 0000000..9b10164 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/report.txt @@ -0,0 +1,55 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.03 bytes of store kept, 1.03 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 777 MB a day; 281 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 586 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:14:52.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.03 bytes of store kept, 1.03 as tier_down (measured on the indices on hot). +- The Receiver's statements send 777 MB a day; 281 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 586 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 586 MB a day on hot, more than the 281 MB a day that fits, so hot settles above 41 MB at about 67 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 8 MB | 6 MB | 1 | 18023 | +| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7339 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 405 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1921 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2446 | +| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5928 | +| coredns | the frozen tier | 1 | 6 MB | 3 MB | 1 | 8044 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 577 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1682 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5430 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +| fraud-detection | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1435 | +| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13578 | +| frontend-proxy | the frozen tier | 1 | 23 MB | 23 MB | 1 | 62843 | +| grafana | the frozen tier | 1 | 245 MB | 244 MB | 1 | 676544 | +| grafana-sc-alerts | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4203 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5943 | +| grafana-sc-datasources | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 9150 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3531 | +| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 37137 | +| kafka | the frozen tier | 1 | 122 MB | 49 MB | 1 | 135731 | +| kube-proxy | the frozen tier | 1 | 32 MB | 14 MB | 1 | 38945 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4863 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 15222 | +| opensearch | the frozen tier | 1 | 42 MB | 38 MB | 1 | 105815 | +| opentelemetry-collector | the frozen tier | 1 | 217 MB | 163 MB | 1 | 453312 | +| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1893 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1401 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5928 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/run.json new file mode 100644 index 0000000..d48f601 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:14:57.541Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/totals.csv new file mode 100644 index 0000000..5ba2144 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001452Z/totals.csv @@ -0,0 +1,31 @@ +container,total +accounting,18023::budget run +ad,7339::budget run +aws-eks-nodeagent,405::budget run +aws-node,1921::budget run +aws-vpc-cni-init,2446::budget run +cart,5928::budget run +coredns,8044::budget run +currency,577::budget run +email,1682::budget run +flagd,5430::budget run +flagd-ui,960::budget run +fraud-detection,1435::budget run +frontend,13578::budget run +frontend-proxy,62843::budget run +grafana,676544::budget run +grafana-sc-alerts,4203::budget run +grafana-sc-dashboard,5943::budget run +grafana-sc-datasources,4261::budget run +image-provider,9150::budget run +init-config,3531::budget run +jaeger,37137::budget run +kafka,135731::budget run +kube-proxy,38945::budget run +load-generator,4863::budget run +metrics-server,15222::budget run +opensearch,105815::budget run +opentelemetry-collector,453312::budget run +wait-for-kafka,1893::budget run +wait-for-valkey-cart,1401::budget run +*,5928::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/actions.csv new file mode 100644 index 0000000..69b7e87 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/actions.csv @@ -0,0 +1,31 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/caps.csv new file mode 100644 index 0000000..d0e571c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/caps.csv @@ -0,0 +1,31 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.diff new file mode 100644 index 0000000..3097f6f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.diff @@ -0,0 +1,153 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 5ba2144..82a2527 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,31 +1,31 @@ + container,total +-accounting,18023::budget run +-ad,7339::budget run +-aws-eks-nodeagent,405::budget run +-aws-node,1921::budget run +-aws-vpc-cni-init,2446::budget run +-cart,5928::budget run +-coredns,8044::budget run +-currency,577::budget run +-email,1682::budget run +-flagd,5430::budget run +-flagd-ui,960::budget run +-fraud-detection,1435::budget run +-frontend,13578::budget run +-frontend-proxy,62843::budget run +-grafana,676544::budget run +-grafana-sc-alerts,4203::budget run +-grafana-sc-dashboard,5943::budget run +-grafana-sc-datasources,4261::budget run +-image-provider,9150::budget run +-init-config,3531::budget run +-jaeger,37137::budget run +-kafka,135731::budget run +-kube-proxy,38945::budget run +-load-generator,4863::budget run +-metrics-server,15222::budget run +-opensearch,105815::budget run +-opentelemetry-collector,453312::budget run +-wait-for-kafka,1893::budget run +-wait-for-valkey-cart,1401::budget run +-*,5928::budget run ++accounting,17541::budget run ++ad,7243::budget run ++aws-eks-nodeagent,390::budget run ++aws-node,1852::budget run ++aws-vpc-cni-init,2357::budget run ++cart,5824::budget run ++coredns,7919::budget run ++currency,556::budget run ++email,1622::budget run ++flagd,5234::budget run ++flagd-ui,926::budget run ++fraud-detection,1383::budget run ++frontend,13088::budget run ++frontend-proxy,60576::budget run ++grafana,652799::budget run ++grafana-sc-alerts,4051::budget run ++grafana-sc-dashboard,5729::budget run ++grafana-sc-datasources,4107::budget run ++image-provider,8890::budget run ++init-config,3403::budget run ++jaeger,35797::budget run ++kafka,132522::budget run ++kube-proxy,37754::budget run ++load-generator,4688::budget run ++metrics-server,14673::budget run ++opensearch,102386::budget run ++opentelemetry-collector,450790::budget run ++wait-for-kafka,1862::budget run ++wait-for-valkey-cart,1390::budget run ++*,5729::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 34cef3c..e7c9003 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,46 +1,46 @@ +-# Hot-tier run: 2026-10-26T00:14:52.000Z ++# Hot-tier run: 2026-10-26T00:14:59.000Z + +-Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 67 MB within 2 hours, with 191 MB a day of counted lines moved to the frozen tier. ++Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.03 bytes of store kept, 1.03 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 777 MB a day; 281 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 586 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.01 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 775 MB a day; 280 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 571 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 586 MB a day on hot, more than the 281 MB a day that fits, so hot settles above 41 MB at about 67 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 571 MB a day on hot, more than the 280 MB a day that fits, so hot settles above 41 MB at about 65 MB. Raise the size, move the noisiest services to offload, or lower the sample. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 8 MB | 6 MB | 1 | 18023 | +-| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7339 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 405 | +-| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1921 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2446 | +-| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5928 | +-| coredns | the frozen tier | 1 | 6 MB | 3 MB | 1 | 8044 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 577 | +-| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1682 | +-| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5430 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +-| fraud-detection | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1435 | +-| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13578 | +-| frontend-proxy | the frozen tier | 1 | 23 MB | 23 MB | 1 | 62843 | +-| grafana | the frozen tier | 1 | 245 MB | 244 MB | 1 | 676544 | +-| grafana-sc-alerts | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4203 | +-| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5943 | +-| grafana-sc-datasources | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +-| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 9150 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3531 | +-| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 37137 | +-| kafka | the frozen tier | 1 | 122 MB | 49 MB | 1 | 135731 | +-| kube-proxy | the frozen tier | 1 | 32 MB | 14 MB | 1 | 38945 | +-| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4863 | +-| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 15222 | +-| opensearch | the frozen tier | 1 | 42 MB | 38 MB | 1 | 105815 | +-| opentelemetry-collector | the frozen tier | 1 | 217 MB | 163 MB | 1 | 453312 | +-| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1893 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1401 | +-| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5928 | ++| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 17541 | ++| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7243 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | ++| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1852 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2357 | ++| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5824 | ++| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7919 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 556 | ++| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1622 | ++| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5234 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 926 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1383 | ++| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13088 | ++| frontend-proxy | the frozen tier | 1 | 22 MB | 22 MB | 1 | 60576 | ++| grafana | the frozen tier | 1 | 236 MB | 235 MB | 1 | 652799 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4051 | ++| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5729 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4107 | ++| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8890 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3403 | ++| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 35797 | ++| kafka | the frozen tier | 1 | 118 MB | 48 MB | 1 | 132522 | ++| kube-proxy | the frozen tier | 1 | 31 MB | 14 MB | 1 | 37754 | ++| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4688 | ++| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14673 | ++| opensearch | the frozen tier | 1 | 40 MB | 37 MB | 1 | 102386 | ++| opentelemetry-collector | the frozen tier | 1 | 235 MB | 162 MB | 1 | 450790 | ++| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1862 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1390 | ++| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5729 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.json new file mode 100644 index 0000000..e782608 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/commit.json @@ -0,0 +1 @@ +{"before":"afa4fe44ce9771c9dc07d8b99ae01c3444ab6d24","after":"fc28e9434dc230ca97fc10af9173ef1c22d14180","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/config-generation.csv new file mode 100644 index 0000000..ddb50d6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,88a2a5ef6083 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/latest.md new file mode 100644 index 0000000..e7c9003 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/latest.md @@ -0,0 +1,46 @@ +# Hot-tier run: 2026-10-26T00:14:59.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.01 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +- The Receiver's statements send 775 MB a day; 280 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 571 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 571 MB a day on hot, more than the 280 MB a day that fits, so hot settles above 41 MB at about 65 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 17541 | +| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7243 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1852 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2357 | +| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5824 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7919 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 556 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1622 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5234 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 926 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1383 | +| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13088 | +| frontend-proxy | the frozen tier | 1 | 22 MB | 22 MB | 1 | 60576 | +| grafana | the frozen tier | 1 | 236 MB | 235 MB | 1 | 652799 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4051 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5729 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4107 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8890 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3403 | +| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 35797 | +| kafka | the frozen tier | 1 | 118 MB | 48 MB | 1 | 132522 | +| kube-proxy | the frozen tier | 1 | 31 MB | 14 MB | 1 | 37754 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4688 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14673 | +| opensearch | the frozen tier | 1 | 40 MB | 37 MB | 1 | 102386 | +| opentelemetry-collector | the frozen tier | 1 | 235 MB | 162 MB | 1 | 450790 | +| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1862 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1390 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5729 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/report.txt new file mode 100644 index 0000000..f1a4dc5 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/report.txt @@ -0,0 +1,55 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.01 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 775 MB a day; 280 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 571 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:14:59.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.01 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +- The Receiver's statements send 775 MB a day; 280 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 571 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 571 MB a day on hot, more than the 280 MB a day that fits, so hot settles above 41 MB at about 65 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 17541 | +| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7243 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1852 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2357 | +| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5824 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7919 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 556 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1622 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5234 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 926 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1383 | +| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13088 | +| frontend-proxy | the frozen tier | 1 | 22 MB | 22 MB | 1 | 60576 | +| grafana | the frozen tier | 1 | 236 MB | 235 MB | 1 | 652799 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4051 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5729 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4107 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8890 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3403 | +| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 35797 | +| kafka | the frozen tier | 1 | 118 MB | 48 MB | 1 | 132522 | +| kube-proxy | the frozen tier | 1 | 31 MB | 14 MB | 1 | 37754 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4688 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14673 | +| opensearch | the frozen tier | 1 | 40 MB | 37 MB | 1 | 102386 | +| opentelemetry-collector | the frozen tier | 1 | 235 MB | 162 MB | 1 | 450790 | +| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1862 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1390 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5729 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/run.json new file mode 100644 index 0000000..f612da7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:15:03.346Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/totals.csv new file mode 100644 index 0000000..82a2527 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001458Z/totals.csv @@ -0,0 +1,31 @@ +container,total +accounting,17541::budget run +ad,7243::budget run +aws-eks-nodeagent,390::budget run +aws-node,1852::budget run +aws-vpc-cni-init,2357::budget run +cart,5824::budget run +coredns,7919::budget run +currency,556::budget run +email,1622::budget run +flagd,5234::budget run +flagd-ui,926::budget run +fraud-detection,1383::budget run +frontend,13088::budget run +frontend-proxy,60576::budget run +grafana,652799::budget run +grafana-sc-alerts,4051::budget run +grafana-sc-dashboard,5729::budget run +grafana-sc-datasources,4107::budget run +image-provider,8890::budget run +init-config,3403::budget run +jaeger,35797::budget run +kafka,132522::budget run +kube-proxy,37754::budget run +load-generator,4688::budget run +metrics-server,14673::budget run +opensearch,102386::budget run +opentelemetry-collector,450790::budget run +wait-for-kafka,1862::budget run +wait-for-valkey-cart,1390::budget run +*,5729::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/actions.csv new file mode 100644 index 0000000..69b7e87 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/actions.csv @@ -0,0 +1,31 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/caps.csv new file mode 100644 index 0000000..d0e571c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/caps.csv @@ -0,0 +1,31 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.diff new file mode 100644 index 0000000..dac3b94 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.diff @@ -0,0 +1,153 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 82a2527..4e39f04 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,31 +1,31 @@ + container,total +-accounting,17541::budget run +-ad,7243::budget run +-aws-eks-nodeagent,390::budget run +-aws-node,1852::budget run +-aws-vpc-cni-init,2357::budget run +-cart,5824::budget run +-coredns,7919::budget run +-currency,556::budget run +-email,1622::budget run +-flagd,5234::budget run +-flagd-ui,926::budget run +-fraud-detection,1383::budget run +-frontend,13088::budget run +-frontend-proxy,60576::budget run +-grafana,652799::budget run +-grafana-sc-alerts,4051::budget run +-grafana-sc-dashboard,5729::budget run +-grafana-sc-datasources,4107::budget run +-image-provider,8890::budget run +-init-config,3403::budget run +-jaeger,35797::budget run +-kafka,132522::budget run +-kube-proxy,37754::budget run +-load-generator,4688::budget run +-metrics-server,14673::budget run +-opensearch,102386::budget run +-opentelemetry-collector,450790::budget run +-wait-for-kafka,1862::budget run +-wait-for-valkey-cart,1390::budget run +-*,5729::budget run ++accounting,16910::budget run ++ad,7055::budget run ++aws-eks-nodeagent,371::budget run ++aws-node,1761::budget run ++aws-vpc-cni-init,2242::budget run ++cart,5688::budget run ++coredns,7756::budget run ++currency,529::budget run ++email,1542::budget run ++flagd,4978::budget run ++flagd-ui,880::budget run ++fraud-detection,1315::budget run ++frontend,12447::budget run ++frontend-proxy,57608::budget run ++grafana,621133::budget run ++grafana-sc-alerts,3853::budget run ++grafana-sc-dashboard,5448::budget run ++grafana-sc-datasources,3906::budget run ++image-provider,8550::budget run ++init-config,3237::budget run ++jaeger,34043::budget run ++kafka,128256::budget run ++kube-proxy,36137::budget run ++load-generator,4458::budget run ++metrics-server,13954::budget run ++opensearch,97781::budget run ++opentelemetry-collector,449225::budget run ++wait-for-kafka,1822::budget run ++wait-for-valkey-cart,1376::budget run ++*,5448::budget run +diff --git a/reports/latest.md b/reports/latest.md +index e7c9003..747fe0a 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,46 +1,46 @@ +-# Hot-tier run: 2026-10-26T00:14:59.000Z ++# Hot-tier run: 2026-10-26T00:15:09.000Z + +-Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 65 MB within 2 hours, with 204 MB a day of counted lines moved to the frozen tier. ++Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.01 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 775 MB a day; 280 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 571 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.06 bytes of store kept, 1.06 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 769 MB a day; 244 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 552 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 571 MB a day on hot, more than the 280 MB a day that fits, so hot settles above 41 MB at about 65 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 552 MB a day on hot, more than the 244 MB a day that fits, so hot settles above 41 MB at about 68 MB. Raise the size, move the noisiest services to offload, or lower the sample. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 17541 | +-| ad | the frozen tier | 1 | 10 MB | 3 MB | 1 | 7243 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +-| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1852 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2357 | +-| cart | the frozen tier | 1 | 18 MB | 2 MB | 1 | 5824 | +-| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7919 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 556 | +-| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1622 | +-| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5234 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 926 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1383 | +-| frontend | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13088 | +-| frontend-proxy | the frozen tier | 1 | 22 MB | 22 MB | 1 | 60576 | +-| grafana | the frozen tier | 1 | 236 MB | 235 MB | 1 | 652799 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4051 | +-| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5729 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4107 | +-| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8890 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3403 | +-| jaeger | the frozen tier | 1 | 13 MB | 13 MB | 1 | 35797 | +-| kafka | the frozen tier | 1 | 118 MB | 48 MB | 1 | 132522 | +-| kube-proxy | the frozen tier | 1 | 31 MB | 14 MB | 1 | 37754 | +-| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4688 | +-| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14673 | +-| opensearch | the frozen tier | 1 | 40 MB | 37 MB | 1 | 102386 | +-| opentelemetry-collector | the frozen tier | 1 | 235 MB | 162 MB | 1 | 450790 | +-| wait-for-kafka | the frozen tier | 1 | 14 MB | 1 MB | 1 | 1862 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1390 | +-| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5729 | ++| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16910 | ++| ad | the frozen tier | 1 | 9 MB | 3 MB | 1 | 7055 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 371 | ++| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1761 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2242 | ++| cart | the frozen tier | 1 | 17 MB | 2 MB | 1 | 5688 | ++| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7756 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | ++| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1542 | ++| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4978 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 880 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1315 | ++| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12447 | ++| frontend-proxy | the frozen tier | 1 | 21 MB | 21 MB | 1 | 57608 | ++| grafana | the frozen tier | 1 | 224 MB | 224 MB | 1 | 621133 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3853 | ++| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5448 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3906 | ++| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8550 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3237 | ++| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 34043 | ++| kafka | the frozen tier | 1 | 112 MB | 46 MB | 1 | 128256 | ++| kube-proxy | the frozen tier | 1 | 29 MB | 13 MB | 1 | 36137 | ++| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4458 | ++| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13954 | ++| opensearch | the frozen tier | 1 | 38 MB | 35 MB | 1 | 97781 | ++| opentelemetry-collector | the frozen tier | 1 | 256 MB | 162 MB | 1 | 449225 | ++| wait-for-kafka | the frozen tier | 1 | 13 MB | 1 MB | 1 | 1822 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1376 | ++| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5448 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.json new file mode 100644 index 0000000..de470b9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/commit.json @@ -0,0 +1 @@ +{"before":"fc28e9434dc230ca97fc10af9173ef1c22d14180","after":"09309365d88d13c5d5b6f39a888e2cbd434ba3cb","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/config-generation.csv new file mode 100644 index 0000000..ddb50d6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,88a2a5ef6083 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/latest.md new file mode 100644 index 0000000..747fe0a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/latest.md @@ -0,0 +1,46 @@ +# Hot-tier run: 2026-10-26T00:15:09.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.06 bytes of store kept, 1.06 as tier_down (measured on the indices on hot). +- The Receiver's statements send 769 MB a day; 244 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 552 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 552 MB a day on hot, more than the 244 MB a day that fits, so hot settles above 41 MB at about 68 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16910 | +| ad | the frozen tier | 1 | 9 MB | 3 MB | 1 | 7055 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 371 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1761 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2242 | +| cart | the frozen tier | 1 | 17 MB | 2 MB | 1 | 5688 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7756 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1542 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4978 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 880 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1315 | +| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12447 | +| frontend-proxy | the frozen tier | 1 | 21 MB | 21 MB | 1 | 57608 | +| grafana | the frozen tier | 1 | 224 MB | 224 MB | 1 | 621133 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3853 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5448 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3906 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8550 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3237 | +| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 34043 | +| kafka | the frozen tier | 1 | 112 MB | 46 MB | 1 | 128256 | +| kube-proxy | the frozen tier | 1 | 29 MB | 13 MB | 1 | 36137 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4458 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13954 | +| opensearch | the frozen tier | 1 | 38 MB | 35 MB | 1 | 97781 | +| opentelemetry-collector | the frozen tier | 1 | 256 MB | 162 MB | 1 | 449225 | +| wait-for-kafka | the frozen tier | 1 | 13 MB | 1 MB | 1 | 1822 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1376 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5448 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/report.txt new file mode 100644 index 0000000..ced0f3e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/report.txt @@ -0,0 +1,55 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.06 bytes of store kept, 1.06 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 769 MB a day; 244 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 552 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:15:09.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.06 bytes of store kept, 1.06 as tier_down (measured on the indices on hot). +- The Receiver's statements send 769 MB a day; 244 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 552 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 552 MB a day on hot, more than the 244 MB a day that fits, so hot settles above 41 MB at about 68 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16910 | +| ad | the frozen tier | 1 | 9 MB | 3 MB | 1 | 7055 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 371 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1761 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2242 | +| cart | the frozen tier | 1 | 17 MB | 2 MB | 1 | 5688 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7756 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1542 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4978 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 880 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1315 | +| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12447 | +| frontend-proxy | the frozen tier | 1 | 21 MB | 21 MB | 1 | 57608 | +| grafana | the frozen tier | 1 | 224 MB | 224 MB | 1 | 621133 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3853 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5448 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3906 | +| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8550 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3237 | +| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 34043 | +| kafka | the frozen tier | 1 | 112 MB | 46 MB | 1 | 128256 | +| kube-proxy | the frozen tier | 1 | 29 MB | 13 MB | 1 | 36137 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4458 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13954 | +| opensearch | the frozen tier | 1 | 38 MB | 35 MB | 1 | 97781 | +| opentelemetry-collector | the frozen tier | 1 | 256 MB | 162 MB | 1 | 449225 | +| wait-for-kafka | the frozen tier | 1 | 13 MB | 1 MB | 1 | 1822 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1376 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5448 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/run.json new file mode 100644 index 0000000..88d528c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:15:14.574Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/totals.csv new file mode 100644 index 0000000..4e39f04 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001509Z/totals.csv @@ -0,0 +1,31 @@ +container,total +accounting,16910::budget run +ad,7055::budget run +aws-eks-nodeagent,371::budget run +aws-node,1761::budget run +aws-vpc-cni-init,2242::budget run +cart,5688::budget run +coredns,7756::budget run +currency,529::budget run +email,1542::budget run +flagd,4978::budget run +flagd-ui,880::budget run +fraud-detection,1315::budget run +frontend,12447::budget run +frontend-proxy,57608::budget run +grafana,621133::budget run +grafana-sc-alerts,3853::budget run +grafana-sc-dashboard,5448::budget run +grafana-sc-datasources,3906::budget run +image-provider,8550::budget run +init-config,3237::budget run +jaeger,34043::budget run +kafka,128256::budget run +kube-proxy,36137::budget run +load-generator,4458::budget run +metrics-server,13954::budget run +opensearch,97781::budget run +opentelemetry-collector,449225::budget run +wait-for-kafka,1822::budget run +wait-for-valkey-cart,1376::budget run +*,5448::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/actions.csv new file mode 100644 index 0000000..69b7e87 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/actions.csv @@ -0,0 +1,31 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/caps.csv new file mode 100644 index 0000000..d0e571c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/caps.csv @@ -0,0 +1,31 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.diff new file mode 100644 index 0000000..bb7e87f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.diff @@ -0,0 +1,153 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 4e39f04..c119b0a 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,31 +1,31 @@ + container,total +-accounting,16910::budget run +-ad,7055::budget run +-aws-eks-nodeagent,371::budget run +-aws-node,1761::budget run +-aws-vpc-cni-init,2242::budget run +-cart,5688::budget run +-coredns,7756::budget run +-currency,529::budget run +-email,1542::budget run +-flagd,4978::budget run +-flagd-ui,880::budget run +-fraud-detection,1315::budget run +-frontend,12447::budget run +-frontend-proxy,57608::budget run +-grafana,621133::budget run +-grafana-sc-alerts,3853::budget run +-grafana-sc-dashboard,5448::budget run +-grafana-sc-datasources,3906::budget run +-image-provider,8550::budget run +-init-config,3237::budget run +-jaeger,34043::budget run +-kafka,128256::budget run +-kube-proxy,36137::budget run +-load-generator,4458::budget run +-metrics-server,13954::budget run +-opensearch,97781::budget run +-opentelemetry-collector,449225::budget run +-wait-for-kafka,1822::budget run +-wait-for-valkey-cart,1376::budget run +-*,5448::budget run ++accounting,16231::budget run ++ad,6852::budget run ++aws-eks-nodeagent,350::budget run ++aws-node,1663::budget run ++aws-vpc-cni-init,2117::budget run ++cart,5541::budget run ++coredns,7580::budget run ++currency,499::budget run ++email,1457::budget run ++flagd,4702::budget run ++flagd-ui,831::budget run ++fraud-detection,1242::budget run ++frontend,11756::budget run ++frontend-proxy,54410::budget run ++grafana,587003::budget run ++grafana-sc-alerts,3639::budget run ++grafana-sc-dashboard,5146::budget run ++grafana-sc-datasources,3689::budget run ++image-provider,8183::budget run ++init-config,3057::budget run ++jaeger,32153::budget run ++kafka,123658::budget run ++kube-proxy,34394::budget run ++load-generator,4211::budget run ++metrics-server,13179::budget run ++opensearch,92817::budget run ++opentelemetry-collector,456456::budget run ++wait-for-kafka,1778::budget run ++wait-for-valkey-cart,1360::budget run ++*,5146::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 747fe0a..7527e04 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,46 +1,46 @@ +-# Hot-tier run: 2026-10-26T00:15:09.000Z ++# Hot-tier run: 2026-10-26T00:15:21.000Z + +-Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 68 MB within 2 hours, with 217 MB a day of counted lines moved to the frozen tier. ++Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.06 bytes of store kept, 1.06 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 769 MB a day; 244 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 552 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.13 bytes of store kept, 0.75 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 847 MB a day; 223 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 535 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 552 MB a day on hot, more than the 244 MB a day that fits, so hot settles above 41 MB at about 68 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 535 MB a day on hot, more than the 223 MB a day that fits, so hot settles above 41 MB at about 70 MB. Raise the size, move the noisiest services to offload, or lower the sample. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16910 | +-| ad | the frozen tier | 1 | 9 MB | 3 MB | 1 | 7055 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 371 | +-| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1761 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2242 | +-| cart | the frozen tier | 1 | 17 MB | 2 MB | 1 | 5688 | +-| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7756 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +-| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1542 | +-| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4978 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 880 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1315 | +-| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12447 | +-| frontend-proxy | the frozen tier | 1 | 21 MB | 21 MB | 1 | 57608 | +-| grafana | the frozen tier | 1 | 224 MB | 224 MB | 1 | 621133 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3853 | +-| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5448 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3906 | +-| image-provider | the frozen tier | 1 | 4 MB | 3 MB | 1 | 8550 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3237 | +-| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 34043 | +-| kafka | the frozen tier | 1 | 112 MB | 46 MB | 1 | 128256 | +-| kube-proxy | the frozen tier | 1 | 29 MB | 13 MB | 1 | 36137 | +-| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4458 | +-| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13954 | +-| opensearch | the frozen tier | 1 | 38 MB | 35 MB | 1 | 97781 | +-| opentelemetry-collector | the frozen tier | 1 | 256 MB | 162 MB | 1 | 449225 | +-| wait-for-kafka | the frozen tier | 1 | 13 MB | 1 MB | 1 | 1822 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1376 | +-| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5448 | ++| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16231 | ++| ad | the frozen tier | 1 | 9 MB | 2 MB | 1 | 6852 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 350 | ++| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1663 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2117 | ++| cart | the frozen tier | 1 | 16 MB | 2 MB | 1 | 5541 | ++| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7580 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 499 | ++| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1457 | ++| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4702 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 831 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1242 | ++| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11756 | ++| frontend-proxy | the frozen tier | 1 | 20 MB | 20 MB | 1 | 54410 | ++| grafana | the frozen tier | 1 | 212 MB | 211 MB | 1 | 587003 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3639 | ++| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5146 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3689 | ++| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8183 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3057 | ++| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32153 | ++| kafka | the frozen tier | 1 | 106 MB | 45 MB | 1 | 123658 | ++| kube-proxy | the frozen tier | 1 | 27 MB | 12 MB | 1 | 34394 | ++| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4211 | ++| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13179 | ++| opensearch | the frozen tier | 1 | 36 MB | 33 MB | 1 | 92817 | ++| opentelemetry-collector | the frozen tier | 1 | 362 MB | 164 MB | 1 | 456456 | ++| wait-for-kafka | the frozen tier | 1 | 12 MB | 1 MB | 1 | 1778 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1360 | ++| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5146 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.json new file mode 100644 index 0000000..b939c2b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/commit.json @@ -0,0 +1 @@ +{"before":"09309365d88d13c5d5b6f39a888e2cbd434ba3cb","after":"c72d0a2be4f4c292919e02a324ca752708d2274b","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/config-generation.csv new file mode 100644 index 0000000..ddb50d6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,88a2a5ef6083 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/latest.md new file mode 100644 index 0000000..7527e04 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/latest.md @@ -0,0 +1,46 @@ +# Hot-tier run: 2026-10-26T00:15:21.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.13 bytes of store kept, 0.75 as tier_down (measured on the indices on hot). +- The Receiver's statements send 847 MB a day; 223 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 535 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 535 MB a day on hot, more than the 223 MB a day that fits, so hot settles above 41 MB at about 70 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16231 | +| ad | the frozen tier | 1 | 9 MB | 2 MB | 1 | 6852 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 350 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1663 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2117 | +| cart | the frozen tier | 1 | 16 MB | 2 MB | 1 | 5541 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7580 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 499 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1457 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4702 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 831 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1242 | +| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11756 | +| frontend-proxy | the frozen tier | 1 | 20 MB | 20 MB | 1 | 54410 | +| grafana | the frozen tier | 1 | 212 MB | 211 MB | 1 | 587003 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3639 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5146 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3689 | +| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8183 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3057 | +| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32153 | +| kafka | the frozen tier | 1 | 106 MB | 45 MB | 1 | 123658 | +| kube-proxy | the frozen tier | 1 | 27 MB | 12 MB | 1 | 34394 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4211 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13179 | +| opensearch | the frozen tier | 1 | 36 MB | 33 MB | 1 | 92817 | +| opentelemetry-collector | the frozen tier | 1 | 362 MB | 164 MB | 1 | 456456 | +| wait-for-kafka | the frozen tier | 1 | 12 MB | 1 MB | 1 | 1778 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1360 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5146 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/report.txt new file mode 100644 index 0000000..1c09b21 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/report.txt @@ -0,0 +1,55 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.13 bytes of store kept, 0.75 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 847 MB a day; 223 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 535 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:15:21.000Z + +Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.13 bytes of store kept, 0.75 as tier_down (measured on the indices on hot). +- The Receiver's statements send 847 MB a day; 223 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 535 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 535 MB a day on hot, more than the 223 MB a day that fits, so hot settles above 41 MB at about 70 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16231 | +| ad | the frozen tier | 1 | 9 MB | 2 MB | 1 | 6852 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 350 | +| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1663 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2117 | +| cart | the frozen tier | 1 | 16 MB | 2 MB | 1 | 5541 | +| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7580 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 499 | +| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1457 | +| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4702 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 831 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1242 | +| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11756 | +| frontend-proxy | the frozen tier | 1 | 20 MB | 20 MB | 1 | 54410 | +| grafana | the frozen tier | 1 | 212 MB | 211 MB | 1 | 587003 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3639 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5146 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3689 | +| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8183 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3057 | +| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32153 | +| kafka | the frozen tier | 1 | 106 MB | 45 MB | 1 | 123658 | +| kube-proxy | the frozen tier | 1 | 27 MB | 12 MB | 1 | 34394 | +| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4211 | +| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13179 | +| opensearch | the frozen tier | 1 | 36 MB | 33 MB | 1 | 92817 | +| opentelemetry-collector | the frozen tier | 1 | 362 MB | 164 MB | 1 | 456456 | +| wait-for-kafka | the frozen tier | 1 | 12 MB | 1 MB | 1 | 1778 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1360 | +| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5146 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/run.json new file mode 100644 index 0000000..6c8613f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:15:26.533Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/totals.csv new file mode 100644 index 0000000..c119b0a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001520Z/totals.csv @@ -0,0 +1,31 @@ +container,total +accounting,16231::budget run +ad,6852::budget run +aws-eks-nodeagent,350::budget run +aws-node,1663::budget run +aws-vpc-cni-init,2117::budget run +cart,5541::budget run +coredns,7580::budget run +currency,499::budget run +email,1457::budget run +flagd,4702::budget run +flagd-ui,831::budget run +fraud-detection,1242::budget run +frontend,11756::budget run +frontend-proxy,54410::budget run +grafana,587003::budget run +grafana-sc-alerts,3639::budget run +grafana-sc-dashboard,5146::budget run +grafana-sc-datasources,3689::budget run +image-provider,8183::budget run +init-config,3057::budget run +jaeger,32153::budget run +kafka,123658::budget run +kube-proxy,34394::budget run +load-generator,4211::budget run +metrics-server,13179::budget run +opensearch,92817::budget run +opentelemetry-collector,456456::budget run +wait-for-kafka,1778::budget run +wait-for-valkey-cart,1360::budget run +*,5146::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.diff new file mode 100644 index 0000000..d44a045 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.diff @@ -0,0 +1,226 @@ +diff --git a/log10x/policy/actions.csv b/log10x/policy/actions.csv +index 69b7e87..ca15017 100644 +--- a/log10x/policy/actions.csv ++++ b/log10x/policy/actions.csv +@@ -10,6 +10,7 @@ currency,tier_down::budget run + email,tier_down::budget run + flagd,tier_down::budget run + flagd-ui,tier_down::budget run ++fluentd-10x,tier_down::budget run + fraud-detection,tier_down::budget run + frontend,tier_down::budget run + frontend-proxy,tier_down::budget run +@@ -26,6 +27,12 @@ load-generator,tier_down::budget run + metrics-server,tier_down::budget run + opensearch,tier_down::budget run + opentelemetry-collector,tier_down::budget run ++payment,tier_down::budget run ++postgresql,tier_down::budget run ++prometheus-server,tier_down::budget run ++quote,tier_down::budget run ++recommendation,tier_down::budget run ++valkey-cart,tier_down::budget run + wait-for-kafka,tier_down::budget run + wait-for-valkey-cart,tier_down::budget run + *,tier_down::budget run +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index d0e571c..f92f886 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -10,6 +10,7 @@ currency,1::budget run + email,1::budget run + flagd,1::budget run + flagd-ui,1::budget run ++fluentd-10x,1::budget run + fraud-detection,1::budget run + frontend,1::budget run + frontend-proxy,1::budget run +@@ -26,6 +27,12 @@ load-generator,1::budget run + metrics-server,1::budget run + opensearch,1::budget run + opentelemetry-collector,1::budget run ++payment,1::budget run ++postgresql,1::budget run ++prometheus-server,1::budget run ++quote,1::budget run ++recommendation,1::budget run ++valkey-cart,1::budget run + wait-for-kafka,1::budget run + wait-for-valkey-cart,1::budget run + *,1::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index ddb50d6..89e536b 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,88a2a5ef6083 ++generation,4236ef75e377 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index c119b0a..c75da71 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,31 +1,38 @@ + container,total +-accounting,16231::budget run +-ad,6852::budget run +-aws-eks-nodeagent,350::budget run +-aws-node,1663::budget run +-aws-vpc-cni-init,2117::budget run +-cart,5541::budget run +-coredns,7580::budget run +-currency,499::budget run +-email,1457::budget run +-flagd,4702::budget run +-flagd-ui,831::budget run +-fraud-detection,1242::budget run +-frontend,11756::budget run +-frontend-proxy,54410::budget run +-grafana,587003::budget run +-grafana-sc-alerts,3639::budget run +-grafana-sc-dashboard,5146::budget run +-grafana-sc-datasources,3689::budget run +-image-provider,8183::budget run +-init-config,3057::budget run +-jaeger,32153::budget run +-kafka,123658::budget run +-kube-proxy,34394::budget run +-load-generator,4211::budget run +-metrics-server,13179::budget run +-opensearch,92817::budget run +-opentelemetry-collector,456456::budget run +-wait-for-kafka,1778::budget run +-wait-for-valkey-cart,1360::budget run +-*,5146::budget run ++accounting,14129::budget run ++ad,6743::budget run ++aws-eks-nodeagent,287::budget run ++aws-node,1361::budget run ++aws-vpc-cni-init,1732::budget run ++cart,5115::budget run ++coredns,7035::budget run ++currency,408::budget run ++email,1192::budget run ++flagd,3847::budget run ++flagd-ui,680::budget run ++fluentd-10x,23495::budget run ++fraud-detection,1016::budget run ++frontend,23318::budget run ++frontend-proxy,44521::budget run ++grafana,482478::budget run ++grafana-sc-alerts,2977::budget run ++grafana-sc-dashboard,4210::budget run ++grafana-sc-datasources,3018::budget run ++image-provider,6959::budget run ++init-config,2501::budget run ++jaeger,26309::budget run ++kafka,109746::budget run ++kube-proxy,29007::budget run ++load-generator,3445::budget run ++metrics-server,10784::budget run ++opensearch,78270::budget run ++opentelemetry-collector,455772::budget run ++payment,1171::budget run ++postgresql,10651::budget run ++prometheus-server,8542::budget run ++quote,189::budget run ++recommendation,3226::budget run ++valkey-cart,4089::budget run ++wait-for-kafka,1644::budget run ++wait-for-valkey-cart,1313::budget run ++*,4150::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 7527e04..f123a4f 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,46 +1,53 @@ +-# Hot-tier run: 2026-10-26T00:15:21.000Z ++# Hot-tier run: 2026-10-26T00:16:09.000Z + +-Hot tier: 2 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 70 MB within 2 hours, with 312 MB a day of counted lines moved to the frozen tier. ++Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 0 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 1 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.13 bytes of store kept, 0.75 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 847 MB a day; 223 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 535 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.20 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 999 MB a day; 164 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 497 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 535 MB a day on hot, more than the 223 MB a day that fits, so hot settles above 41 MB at about 70 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 497 MB a day on hot, more than the 164 MB a day that fits, so hot settles above 41 MB at about 74 MB. Raise the size, move the noisiest services to offload, or lower the sample. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 7 MB | 6 MB | 1 | 16231 | +-| ad | the frozen tier | 1 | 9 MB | 2 MB | 1 | 6852 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 350 | +-| aws-node | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1663 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2117 | +-| cart | the frozen tier | 1 | 16 MB | 2 MB | 1 | 5541 | +-| coredns | the frozen tier | 1 | 5 MB | 3 MB | 1 | 7580 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 499 | +-| email | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1457 | +-| flagd | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4702 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 831 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1242 | +-| frontend | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11756 | +-| frontend-proxy | the frozen tier | 1 | 20 MB | 20 MB | 1 | 54410 | +-| grafana | the frozen tier | 1 | 212 MB | 211 MB | 1 | 587003 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3639 | +-| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5146 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3689 | +-| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8183 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3057 | +-| jaeger | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32153 | +-| kafka | the frozen tier | 1 | 106 MB | 45 MB | 1 | 123658 | +-| kube-proxy | the frozen tier | 1 | 27 MB | 12 MB | 1 | 34394 | +-| load-generator | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4211 | +-| metrics-server | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13179 | +-| opensearch | the frozen tier | 1 | 36 MB | 33 MB | 1 | 92817 | +-| opentelemetry-collector | the frozen tier | 1 | 362 MB | 164 MB | 1 | 456456 | +-| wait-for-kafka | the frozen tier | 1 | 12 MB | 1 MB | 1 | 1778 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1360 | +-| `*` (any other service) | the frozen tier | 1 | | 2 MB | 1 | 5146 | ++| accounting | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14129 | ++| ad | the frozen tier | 1 | 16 MB | 2 MB | 1 | 6743 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 287 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1361 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1732 | ++| cart | the frozen tier | 1 | 37 MB | 2 MB | 1 | 5115 | ++| coredns | the frozen tier | 1 | 4 MB | 3 MB | 1 | 7035 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 408 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1192 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3847 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 680 | ++| fluentd-10x | the frozen tier | 1 | 15 MB | 8 MB | 1 | 23495 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1016 | ++| frontend | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23318 | ++| frontend-proxy | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44521 | ++| grafana | the frozen tier | 1 | 174 MB | 174 MB | 1 | 482478 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2977 | ++| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4210 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3018 | ++| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6959 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2501 | ++| jaeger | the frozen tier | 1 | 9 MB | 9 MB | 1 | 26309 | ++| kafka | the frozen tier | 1 | 128 MB | 40 MB | 1 | 109746 | ++| kube-proxy | the frozen tier | 1 | 22 MB | 10 MB | 1 | 29007 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3445 | ++| metrics-server | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10784 | ++| opensearch | the frozen tier | 1 | 30 MB | 28 MB | 1 | 78270 | ++| opentelemetry-collector | the frozen tier | 1 | 486 MB | 164 MB | 1 | 455772 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | ++| postgresql | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10651 | ++| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8542 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 189 | ++| recommendation | the frozen tier | 1 | 13 MB | 1 MB | 1 | 3226 | ++| valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4089 | ++| wait-for-kafka | the frozen tier | 1 | 10 MB | 1 MB | 1 | 1644 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1313 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4150 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.json new file mode 100644 index 0000000..e72cdeb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/commit.json @@ -0,0 +1 @@ +{"before":"c72d0a2be4f4c292919e02a324ca752708d2274b","after":"79cc5655b373e5323862134669c10bd6fc64c335","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/latest.md new file mode 100644 index 0000000..f123a4f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/latest.md @@ -0,0 +1,53 @@ +# Hot-tier run: 2026-10-26T00:16:09.000Z + +Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 1 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.20 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 999 MB a day; 164 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 497 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 497 MB a day on hot, more than the 164 MB a day that fits, so hot settles above 41 MB at about 74 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14129 | +| ad | the frozen tier | 1 | 16 MB | 2 MB | 1 | 6743 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 287 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1361 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1732 | +| cart | the frozen tier | 1 | 37 MB | 2 MB | 1 | 5115 | +| coredns | the frozen tier | 1 | 4 MB | 3 MB | 1 | 7035 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 408 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1192 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3847 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 680 | +| fluentd-10x | the frozen tier | 1 | 15 MB | 8 MB | 1 | 23495 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1016 | +| frontend | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23318 | +| frontend-proxy | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44521 | +| grafana | the frozen tier | 1 | 174 MB | 174 MB | 1 | 482478 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2977 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4210 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3018 | +| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6959 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2501 | +| jaeger | the frozen tier | 1 | 9 MB | 9 MB | 1 | 26309 | +| kafka | the frozen tier | 1 | 128 MB | 40 MB | 1 | 109746 | +| kube-proxy | the frozen tier | 1 | 22 MB | 10 MB | 1 | 29007 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3445 | +| metrics-server | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10784 | +| opensearch | the frozen tier | 1 | 30 MB | 28 MB | 1 | 78270 | +| opentelemetry-collector | the frozen tier | 1 | 486 MB | 164 MB | 1 | 455772 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +| postgresql | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10651 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8542 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 189 | +| recommendation | the frozen tier | 1 | 13 MB | 1 MB | 1 | 3226 | +| valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4089 | +| wait-for-kafka | the frozen tier | 1 | 10 MB | 1 MB | 1 | 1644 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1313 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4150 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/report.txt new file mode 100644 index 0000000..d2938f6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/report.txt @@ -0,0 +1,62 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 1 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.20 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 999 MB a day; 164 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 497 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:16:09.000Z + +Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 1 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.20 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 999 MB a day; 164 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 497 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 497 MB a day on hot, more than the 164 MB a day that fits, so hot settles above 41 MB at about 74 MB. Raise the size, move the noisiest services to offload, or lower the sample. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14129 | +| ad | the frozen tier | 1 | 16 MB | 2 MB | 1 | 6743 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 287 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1361 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1732 | +| cart | the frozen tier | 1 | 37 MB | 2 MB | 1 | 5115 | +| coredns | the frozen tier | 1 | 4 MB | 3 MB | 1 | 7035 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 408 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1192 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3847 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 680 | +| fluentd-10x | the frozen tier | 1 | 15 MB | 8 MB | 1 | 23495 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1016 | +| frontend | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23318 | +| frontend-proxy | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44521 | +| grafana | the frozen tier | 1 | 174 MB | 174 MB | 1 | 482478 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2977 | +| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4210 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3018 | +| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6959 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2501 | +| jaeger | the frozen tier | 1 | 9 MB | 9 MB | 1 | 26309 | +| kafka | the frozen tier | 1 | 128 MB | 40 MB | 1 | 109746 | +| kube-proxy | the frozen tier | 1 | 22 MB | 10 MB | 1 | 29007 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3445 | +| metrics-server | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10784 | +| opensearch | the frozen tier | 1 | 30 MB | 28 MB | 1 | 78270 | +| opentelemetry-collector | the frozen tier | 1 | 486 MB | 164 MB | 1 | 455772 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +| postgresql | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10651 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8542 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 189 | +| recommendation | the frozen tier | 1 | 13 MB | 1 MB | 1 | 3226 | +| valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4089 | +| wait-for-kafka | the frozen tier | 1 | 10 MB | 1 MB | 1 | 1644 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1313 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4150 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/run.json new file mode 100644 index 0000000..30067a3 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:16:17.367Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/totals.csv new file mode 100644 index 0000000..c75da71 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001609Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,14129::budget run +ad,6743::budget run +aws-eks-nodeagent,287::budget run +aws-node,1361::budget run +aws-vpc-cni-init,1732::budget run +cart,5115::budget run +coredns,7035::budget run +currency,408::budget run +email,1192::budget run +flagd,3847::budget run +flagd-ui,680::budget run +fluentd-10x,23495::budget run +fraud-detection,1016::budget run +frontend,23318::budget run +frontend-proxy,44521::budget run +grafana,482478::budget run +grafana-sc-alerts,2977::budget run +grafana-sc-dashboard,4210::budget run +grafana-sc-datasources,3018::budget run +image-provider,6959::budget run +init-config,2501::budget run +jaeger,26309::budget run +kafka,109746::budget run +kube-proxy,29007::budget run +load-generator,3445::budget run +metrics-server,10784::budget run +opensearch,78270::budget run +opentelemetry-collector,455772::budget run +payment,1171::budget run +postgresql,10651::budget run +prometheus-server,8542::budget run +quote,189::budget run +recommendation,3226::budget run +valkey-cart,4089::budget run +wait-for-kafka,1644::budget run +wait-for-valkey-cart,1313::budget run +*,4150::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.diff new file mode 100644 index 0000000..ba60530 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.diff @@ -0,0 +1,183 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index c75da71..3b4557c 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,14129::budget run +-ad,6743::budget run +-aws-eks-nodeagent,287::budget run +-aws-node,1361::budget run +-aws-vpc-cni-init,1732::budget run +-cart,5115::budget run +-coredns,7035::budget run +-currency,408::budget run +-email,1192::budget run +-flagd,3847::budget run +-flagd-ui,680::budget run +-fluentd-10x,23495::budget run +-fraud-detection,1016::budget run +-frontend,23318::budget run +-frontend-proxy,44521::budget run +-grafana,482478::budget run +-grafana-sc-alerts,2977::budget run +-grafana-sc-dashboard,4210::budget run +-grafana-sc-datasources,3018::budget run +-image-provider,6959::budget run +-init-config,2501::budget run +-jaeger,26309::budget run +-kafka,109746::budget run +-kube-proxy,29007::budget run +-load-generator,3445::budget run +-metrics-server,10784::budget run +-opensearch,78270::budget run +-opentelemetry-collector,455772::budget run +-payment,1171::budget run +-postgresql,10651::budget run +-prometheus-server,8542::budget run +-quote,189::budget run +-recommendation,3226::budget run +-valkey-cart,4089::budget run +-wait-for-kafka,1644::budget run +-wait-for-valkey-cart,1313::budget run +-*,4150::budget run ++accounting,12086::budget run ++ad,6466::budget run ++aws-eks-nodeagent,233::budget run ++aws-node,1105::budget run ++aws-vpc-cni-init,1407::budget run ++cart,4731::budget run ++coredns,6333::budget run ++currency,332::budget run ++email,968::budget run ++flagd,3125::budget run ++flagd-ui,552::budget run ++fluentd-10x,19845::budget run ++fraud-detection,826::budget run ++frontend,33186::budget run ++frontend-proxy,36395::budget run ++grafana,394254::budget run ++grafana-sc-alerts,2419::budget run ++grafana-sc-dashboard,3420::budget run ++grafana-sc-datasources,2452::budget run ++image-provider,5833::budget run ++init-config,2032::budget run ++jaeger,21373::budget run ++kafka,97038::budget run ++kube-proxy,24457::budget run ++load-generator,2799::budget run ++metrics-server,8761::budget run ++opensearch,65507::budget run ++opentelemetry-collector,385112::budget run ++payment,951::budget run ++postgresql,8829::budget run ++prometheus-server,7441::budget run ++quote,154::budget run ++recommendation,3090::budget run ++valkey-cart,5228::budget run ++wait-for-kafka,1530::budget run ++wait-for-valkey-cart,1273::budget run ++*,4076::budget run +diff --git a/reports/latest.md b/reports/latest.md +index f123a4f..cbb1600 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,53 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:16:09.000Z ++# Hot-tier run: 2026-10-26T00:17:10.000Z + +-Hot tier: 3 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 74 MB within 2 hours, with 502 MB a day of counted lines moved to the frozen tier. ++Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 1 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 2 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.20 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 999 MB a day; 164 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 497 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.17 bytes of store kept, 0.91 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 422 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 497 MB a day on hot, more than the 164 MB a day that fits, so hot settles above 41 MB at about 74 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 422 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 96 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14129 | +-| ad | the frozen tier | 1 | 16 MB | 2 MB | 1 | 6743 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 287 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1361 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1732 | +-| cart | the frozen tier | 1 | 37 MB | 2 MB | 1 | 5115 | +-| coredns | the frozen tier | 1 | 4 MB | 3 MB | 1 | 7035 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 408 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1192 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3847 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 680 | +-| fluentd-10x | the frozen tier | 1 | 15 MB | 8 MB | 1 | 23495 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1016 | +-| frontend | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23318 | +-| frontend-proxy | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44521 | +-| grafana | the frozen tier | 1 | 174 MB | 174 MB | 1 | 482478 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2977 | +-| grafana-sc-dashboard | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4210 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3018 | +-| image-provider | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6959 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2501 | +-| jaeger | the frozen tier | 1 | 9 MB | 9 MB | 1 | 26309 | +-| kafka | the frozen tier | 1 | 128 MB | 40 MB | 1 | 109746 | +-| kube-proxy | the frozen tier | 1 | 22 MB | 10 MB | 1 | 29007 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3445 | +-| metrics-server | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10784 | +-| opensearch | the frozen tier | 1 | 30 MB | 28 MB | 1 | 78270 | +-| opentelemetry-collector | the frozen tier | 1 | 486 MB | 164 MB | 1 | 455772 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +-| postgresql | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10651 | +-| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8542 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 189 | +-| recommendation | the frozen tier | 1 | 13 MB | 1 MB | 1 | 3226 | +-| valkey-cart | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4089 | +-| wait-for-kafka | the frozen tier | 1 | 10 MB | 1 MB | 1 | 1644 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1313 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4150 | ++| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12086 | ++| ad | the frozen tier | 1 | 25 MB | 2 MB | 1 | 6466 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 233 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1105 | ++| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1407 | ++| cart | the frozen tier | 1 | 54 MB | 2 MB | 1 | 4731 | ++| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6333 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 332 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 968 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3125 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 552 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 7 MB | 1 | 19845 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 826 | ++| frontend | the frozen tier | 1 | 12 MB | 12 MB | 1 | 33186 | ++| frontend-proxy | the frozen tier | 1 | 13 MB | 13 MB | 1 | 36395 | ++| grafana | the frozen tier | 1 | 143 MB | 142 MB | 1 | 394254 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2419 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3420 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2452 | ++| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5833 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2032 | ++| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21373 | ++| kafka | the frozen tier | 1 | 160 MB | 35 MB | 1 | 97038 | ++| kube-proxy | the frozen tier | 1 | 18 MB | 9 MB | 1 | 24457 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2799 | ++| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8761 | ++| opensearch | the frozen tier | 1 | 25 MB | 24 MB | 1 | 65507 | ++| opentelemetry-collector | the frozen tier | 1 | 624 MB | 139 MB | 1 | 385112 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 951 | ++| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8829 | ++| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7441 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 154 | ++| recommendation | the frozen tier | 1 | 18 MB | 1 MB | 1 | 3090 | ++| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5228 | ++| wait-for-kafka | the frozen tier | 1 | 8 MB | 1 MB | 1 | 1530 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1273 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4076 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.json new file mode 100644 index 0000000..1ac6abf --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/commit.json @@ -0,0 +1 @@ +{"before":"79cc5655b373e5323862134669c10bd6fc64c335","after":"89bb297cf1b8d141aada6b3138632a1f990a404d","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/latest.md new file mode 100644 index 0000000..cbb1600 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:17:10.000Z + +Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 2 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.17 bytes of store kept, 0.91 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 422 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 422 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 96 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12086 | +| ad | the frozen tier | 1 | 25 MB | 2 MB | 1 | 6466 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 233 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1105 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1407 | +| cart | the frozen tier | 1 | 54 MB | 2 MB | 1 | 4731 | +| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6333 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 332 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 968 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3125 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 552 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 7 MB | 1 | 19845 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 826 | +| frontend | the frozen tier | 1 | 12 MB | 12 MB | 1 | 33186 | +| frontend-proxy | the frozen tier | 1 | 13 MB | 13 MB | 1 | 36395 | +| grafana | the frozen tier | 1 | 143 MB | 142 MB | 1 | 394254 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2419 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3420 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2452 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5833 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2032 | +| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21373 | +| kafka | the frozen tier | 1 | 160 MB | 35 MB | 1 | 97038 | +| kube-proxy | the frozen tier | 1 | 18 MB | 9 MB | 1 | 24457 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2799 | +| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8761 | +| opensearch | the frozen tier | 1 | 25 MB | 24 MB | 1 | 65507 | +| opentelemetry-collector | the frozen tier | 1 | 624 MB | 139 MB | 1 | 385112 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 951 | +| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8829 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7441 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 154 | +| recommendation | the frozen tier | 1 | 18 MB | 1 MB | 1 | 3090 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5228 | +| wait-for-kafka | the frozen tier | 1 | 8 MB | 1 MB | 1 | 1530 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1273 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4076 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/report.txt new file mode 100644 index 0000000..667247e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 2 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.17 bytes of store kept, 0.91 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 422 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:17:10.000Z + +Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 2 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.17 bytes of store kept, 0.91 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 422 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 422 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 96 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12086 | +| ad | the frozen tier | 1 | 25 MB | 2 MB | 1 | 6466 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 233 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1105 | +| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1407 | +| cart | the frozen tier | 1 | 54 MB | 2 MB | 1 | 4731 | +| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6333 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 332 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 968 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3125 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 552 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 7 MB | 1 | 19845 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 826 | +| frontend | the frozen tier | 1 | 12 MB | 12 MB | 1 | 33186 | +| frontend-proxy | the frozen tier | 1 | 13 MB | 13 MB | 1 | 36395 | +| grafana | the frozen tier | 1 | 143 MB | 142 MB | 1 | 394254 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2419 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3420 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2452 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5833 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2032 | +| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21373 | +| kafka | the frozen tier | 1 | 160 MB | 35 MB | 1 | 97038 | +| kube-proxy | the frozen tier | 1 | 18 MB | 9 MB | 1 | 24457 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2799 | +| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8761 | +| opensearch | the frozen tier | 1 | 25 MB | 24 MB | 1 | 65507 | +| opentelemetry-collector | the frozen tier | 1 | 624 MB | 139 MB | 1 | 385112 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 951 | +| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8829 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7441 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 154 | +| recommendation | the frozen tier | 1 | 18 MB | 1 MB | 1 | 3090 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5228 | +| wait-for-kafka | the frozen tier | 1 | 8 MB | 1 MB | 1 | 1530 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1273 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4076 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/run.json new file mode 100644 index 0000000..20005cf --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:17:16.251Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/totals.csv new file mode 100644 index 0000000..3b4557c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001709Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,12086::budget run +ad,6466::budget run +aws-eks-nodeagent,233::budget run +aws-node,1105::budget run +aws-vpc-cni-init,1407::budget run +cart,4731::budget run +coredns,6333::budget run +currency,332::budget run +email,968::budget run +flagd,3125::budget run +flagd-ui,552::budget run +fluentd-10x,19845::budget run +fraud-detection,826::budget run +frontend,33186::budget run +frontend-proxy,36395::budget run +grafana,394254::budget run +grafana-sc-alerts,2419::budget run +grafana-sc-dashboard,3420::budget run +grafana-sc-datasources,2452::budget run +image-provider,5833::budget run +init-config,2032::budget run +jaeger,21373::budget run +kafka,97038::budget run +kube-proxy,24457::budget run +load-generator,2799::budget run +metrics-server,8761::budget run +opensearch,65507::budget run +opentelemetry-collector,385112::budget run +payment,951::budget run +postgresql,8829::budget run +prometheus-server,7441::budget run +quote,154::budget run +recommendation,3090::budget run +valkey-cart,5228::budget run +wait-for-kafka,1530::budget run +wait-for-valkey-cart,1273::budget run +*,4076::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.diff new file mode 100644 index 0000000..bd91b25 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 3b4557c..1c91da8 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,12086::budget run +-ad,6466::budget run +-aws-eks-nodeagent,233::budget run +-aws-node,1105::budget run +-aws-vpc-cni-init,1407::budget run +-cart,4731::budget run +-coredns,6333::budget run +-currency,332::budget run +-email,968::budget run +-flagd,3125::budget run +-flagd-ui,552::budget run +-fluentd-10x,19845::budget run +-fraud-detection,826::budget run +-frontend,33186::budget run +-frontend-proxy,36395::budget run +-grafana,394254::budget run +-grafana-sc-alerts,2419::budget run +-grafana-sc-dashboard,3420::budget run +-grafana-sc-datasources,2452::budget run +-image-provider,5833::budget run +-init-config,2032::budget run +-jaeger,21373::budget run +-kafka,97038::budget run +-kube-proxy,24457::budget run +-load-generator,2799::budget run +-metrics-server,8761::budget run +-opensearch,65507::budget run +-opentelemetry-collector,385112::budget run +-payment,951::budget run +-postgresql,8829::budget run +-prometheus-server,7441::budget run +-quote,154::budget run +-recommendation,3090::budget run +-valkey-cart,5228::budget run +-wait-for-kafka,1530::budget run +-wait-for-valkey-cart,1273::budget run +-*,4076::budget run ++accounting,10322::budget run ++ad,6284::budget run ++aws-eks-nodeagent,197::budget run ++aws-node,938::budget run ++aws-vpc-cni-init,1194::budget run ++cart,4481::budget run ++coredns,5748::budget run ++currency,281::budget run ++email,821::budget run ++flagd,2652::budget run ++flagd-ui,469::budget run ++fluentd-10x,17453::budget run ++fraud-detection,700::budget run ++frontend,34888::budget run ++frontend-proxy,30885::budget run ++grafana,336872::budget run ++grafana-sc-alerts,2052::budget run ++grafana-sc-dashboard,2902::budget run ++grafana-sc-datasources,2081::budget run ++image-provider,5095::budget run ++init-config,1724::budget run ++jaeger,21078::budget run ++kafka,88688::budget run ++kube-proxy,21474::budget run ++load-generator,2375::budget run ++metrics-server,7434::budget run ++opensearch,56884::budget run ++opentelemetry-collector,332220::budget run ++payment,807::budget run ++postgresql,7519::budget run ++prometheus-server,7167::budget run ++quote,130::budget run ++recommendation,3001::budget run ++valkey-cart,6053::budget run ++wait-for-kafka,1456::budget run ++wait-for-valkey-cart,1247::budget run ++*,3741::budget run +diff --git a/reports/latest.md b/reports/latest.md +index cbb1600..4933fb2 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:17:10.000Z ++# Hot-tier run: 2026-10-26T00:18:08.000Z + +-Hot tier: 4 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 96 MB within 2 hours, with 730 MB a day of counted lines moved to the frozen tier. ++Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 1 indices; its tier_down lines not yet moved: 2 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.17 bytes of store kept, 0.91 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.26 bytes of store kept, 0.73 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 422 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 369 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 422 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 96 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 369 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 92 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 12086 | +-| ad | the frozen tier | 1 | 25 MB | 2 MB | 1 | 6466 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 233 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1105 | +-| aws-vpc-cni-init | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1407 | +-| cart | the frozen tier | 1 | 54 MB | 2 MB | 1 | 4731 | +-| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6333 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 332 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 968 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3125 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 552 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 7 MB | 1 | 19845 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 826 | +-| frontend | the frozen tier | 1 | 12 MB | 12 MB | 1 | 33186 | +-| frontend-proxy | the frozen tier | 1 | 13 MB | 13 MB | 1 | 36395 | +-| grafana | the frozen tier | 1 | 143 MB | 142 MB | 1 | 394254 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2419 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3420 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2452 | +-| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5833 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2032 | +-| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21373 | +-| kafka | the frozen tier | 1 | 160 MB | 35 MB | 1 | 97038 | +-| kube-proxy | the frozen tier | 1 | 18 MB | 9 MB | 1 | 24457 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2799 | +-| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8761 | +-| opensearch | the frozen tier | 1 | 25 MB | 24 MB | 1 | 65507 | +-| opentelemetry-collector | the frozen tier | 1 | 624 MB | 139 MB | 1 | 385112 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 951 | +-| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8829 | +-| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7441 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 154 | +-| recommendation | the frozen tier | 1 | 18 MB | 1 MB | 1 | 3090 | +-| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5228 | +-| wait-for-kafka | the frozen tier | 1 | 8 MB | 1 MB | 1 | 1530 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1273 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 4076 | ++| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10322 | ++| ad | the frozen tier | 1 | 33 MB | 2 MB | 1 | 6284 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 197 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 938 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1194 | ++| cart | the frozen tier | 1 | 68 MB | 2 MB | 1 | 4481 | ++| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 5748 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 281 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 821 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2652 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 469 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 17453 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 700 | ++| frontend | the frozen tier | 1 | 15 MB | 13 MB | 1 | 34888 | ++| frontend-proxy | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30885 | ++| grafana | the frozen tier | 1 | 123 MB | 121 MB | 1 | 336872 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2052 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2902 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2081 | ++| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5095 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1724 | ++| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21078 | ++| kafka | the frozen tier | 1 | 178 MB | 32 MB | 1 | 88688 | ++| kube-proxy | the frozen tier | 1 | 15 MB | 8 MB | 1 | 21474 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2375 | ++| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7434 | ++| opensearch | the frozen tier | 1 | 21 MB | 20 MB | 1 | 56884 | ++| opentelemetry-collector | the frozen tier | 1 | 709 MB | 120 MB | 1 | 332220 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 807 | ++| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7519 | ++| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7167 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 130 | ++| recommendation | the frozen tier | 1 | 21 MB | 1 MB | 1 | 3001 | ++| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6053 | ++| wait-for-kafka | the frozen tier | 1 | 7 MB | 1 MB | 1 | 1456 | ++| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1247 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3741 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.json new file mode 100644 index 0000000..1c86251 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/commit.json @@ -0,0 +1 @@ +{"before":"89bb297cf1b8d141aada6b3138632a1f990a404d","after":"ee058f9c351a20cf6521dbb4ebf7f387177c95a7","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/latest.md new file mode 100644 index 0000000..4933fb2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:18:08.000Z + +Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.26 bytes of store kept, 0.73 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 369 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 369 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 92 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10322 | +| ad | the frozen tier | 1 | 33 MB | 2 MB | 1 | 6284 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 197 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 938 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1194 | +| cart | the frozen tier | 1 | 68 MB | 2 MB | 1 | 4481 | +| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 5748 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 281 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 821 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2652 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 469 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 17453 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 700 | +| frontend | the frozen tier | 1 | 15 MB | 13 MB | 1 | 34888 | +| frontend-proxy | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30885 | +| grafana | the frozen tier | 1 | 123 MB | 121 MB | 1 | 336872 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2052 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2902 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2081 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5095 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1724 | +| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21078 | +| kafka | the frozen tier | 1 | 178 MB | 32 MB | 1 | 88688 | +| kube-proxy | the frozen tier | 1 | 15 MB | 8 MB | 1 | 21474 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2375 | +| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7434 | +| opensearch | the frozen tier | 1 | 21 MB | 20 MB | 1 | 56884 | +| opentelemetry-collector | the frozen tier | 1 | 709 MB | 120 MB | 1 | 332220 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 807 | +| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7519 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7167 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 130 | +| recommendation | the frozen tier | 1 | 21 MB | 1 MB | 1 | 3001 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6053 | +| wait-for-kafka | the frozen tier | 1 | 7 MB | 1 MB | 1 | 1456 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1247 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3741 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/report.txt new file mode 100644 index 0000000..0aaffaf --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.26 bytes of store kept, 0.73 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 369 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:18:08.000Z + +Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.26 bytes of store kept, 0.73 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 369 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 369 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 92 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10322 | +| ad | the frozen tier | 1 | 33 MB | 2 MB | 1 | 6284 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 197 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 938 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1194 | +| cart | the frozen tier | 1 | 68 MB | 2 MB | 1 | 4481 | +| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 5748 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 281 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 821 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2652 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 469 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 17453 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 700 | +| frontend | the frozen tier | 1 | 15 MB | 13 MB | 1 | 34888 | +| frontend-proxy | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30885 | +| grafana | the frozen tier | 1 | 123 MB | 121 MB | 1 | 336872 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2052 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2902 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2081 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5095 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1724 | +| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21078 | +| kafka | the frozen tier | 1 | 178 MB | 32 MB | 1 | 88688 | +| kube-proxy | the frozen tier | 1 | 15 MB | 8 MB | 1 | 21474 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2375 | +| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7434 | +| opensearch | the frozen tier | 1 | 21 MB | 20 MB | 1 | 56884 | +| opentelemetry-collector | the frozen tier | 1 | 709 MB | 120 MB | 1 | 332220 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 807 | +| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7519 | +| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7167 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 130 | +| recommendation | the frozen tier | 1 | 21 MB | 1 MB | 1 | 3001 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6053 | +| wait-for-kafka | the frozen tier | 1 | 7 MB | 1 MB | 1 | 1456 | +| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1247 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3741 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/run.json new file mode 100644 index 0000000..5e6b7b9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:18:12.226Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/totals.csv new file mode 100644 index 0000000..1c91da8 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001808Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,10322::budget run +ad,6284::budget run +aws-eks-nodeagent,197::budget run +aws-node,938::budget run +aws-vpc-cni-init,1194::budget run +cart,4481::budget run +coredns,5748::budget run +currency,281::budget run +email,821::budget run +flagd,2652::budget run +flagd-ui,469::budget run +fluentd-10x,17453::budget run +fraud-detection,700::budget run +frontend,34888::budget run +frontend-proxy,30885::budget run +grafana,336872::budget run +grafana-sc-alerts,2052::budget run +grafana-sc-dashboard,2902::budget run +grafana-sc-datasources,2081::budget run +image-provider,5095::budget run +init-config,1724::budget run +jaeger,21078::budget run +kafka,88688::budget run +kube-proxy,21474::budget run +load-generator,2375::budget run +metrics-server,7434::budget run +opensearch,56884::budget run +opentelemetry-collector,332220::budget run +payment,807::budget run +postgresql,7519::budget run +prometheus-server,7167::budget run +quote,130::budget run +recommendation,3001::budget run +valkey-cart,6053::budget run +wait-for-kafka,1456::budget run +wait-for-valkey-cart,1247::budget run +*,3741::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.diff new file mode 100644 index 0000000..83ed756 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 1c91da8..c6bc53c 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,10322::budget run +-ad,6284::budget run +-aws-eks-nodeagent,197::budget run +-aws-node,938::budget run +-aws-vpc-cni-init,1194::budget run +-cart,4481::budget run +-coredns,5748::budget run +-currency,281::budget run +-email,821::budget run +-flagd,2652::budget run +-flagd-ui,469::budget run +-fluentd-10x,17453::budget run +-fraud-detection,700::budget run +-frontend,34888::budget run +-frontend-proxy,30885::budget run +-grafana,336872::budget run +-grafana-sc-alerts,2052::budget run +-grafana-sc-dashboard,2902::budget run +-grafana-sc-datasources,2081::budget run +-image-provider,5095::budget run +-init-config,1724::budget run +-jaeger,21078::budget run +-kafka,88688::budget run +-kube-proxy,21474::budget run +-load-generator,2375::budget run +-metrics-server,7434::budget run +-opensearch,56884::budget run +-opentelemetry-collector,332220::budget run +-payment,807::budget run +-postgresql,7519::budget run +-prometheus-server,7167::budget run +-quote,130::budget run +-recommendation,3001::budget run +-valkey-cart,6053::budget run +-wait-for-kafka,1456::budget run +-wait-for-valkey-cart,1247::budget run +-*,3741::budget run ++accounting,8904::budget run ++ad,6144::budget run ++aws-eks-nodeagent,170::budget run ++aws-node,809::budget run ++aws-vpc-cni-init,1030::budget run ++cart,4289::budget run ++coredns,5266::budget run ++currency,243::budget run ++email,709::budget run ++flagd,2288::budget run ++flagd-ui,404::budget run ++fluentd-10x,15612::budget run ++fraud-detection,604::budget run ++frontend,34653::budget run ++frontend-proxy,26643::budget run ++grafana,292016::budget run ++grafana-sc-alerts,1770::budget run ++grafana-sc-dashboard,2504::budget run ++grafana-sc-datasources,1795::budget run ++image-provider,4501::budget run ++init-config,1487::budget run ++jaeger,18183::budget run ++kafka,82001::budget run ++kube-proxy,19177::budget run ++load-generator,2049::budget run ++metrics-server,6413::budget run ++opensearch,50179::budget run ++opentelemetry-collector,291405::budget run ++payment,696::budget run ++postgresql,6486::budget run ++prometheus-server,6366::budget run ++quote,112::budget run ++recommendation,2932::budget run ++valkey-cart,6616::budget run ++wait-for-kafka,1399::budget run ++wait-for-valkey-cart,1226::budget run ++*,3611::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 4933fb2..f03decb 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:18:08.000Z ++# Hot-tier run: 2026-10-26T00:19:09.000Z + +-Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 92 MB within 2 hours, with 880 MB a day of counted lines moved to the frozen tier. ++Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.26 bytes of store kept, 0.73 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 1.2 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 369 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.27 bytes of store kept, 0.61 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 1.3 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 327 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 369 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 92 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 327 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 85 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10322 | +-| ad | the frozen tier | 1 | 33 MB | 2 MB | 1 | 6284 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 197 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 938 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1194 | +-| cart | the frozen tier | 1 | 68 MB | 2 MB | 1 | 4481 | +-| coredns | the frozen tier | 1 | 3 MB | 2 MB | 1 | 5748 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 281 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 821 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2652 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 469 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 17453 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 700 | +-| frontend | the frozen tier | 1 | 15 MB | 13 MB | 1 | 34888 | +-| frontend-proxy | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30885 | +-| grafana | the frozen tier | 1 | 123 MB | 121 MB | 1 | 336872 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2052 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2902 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2081 | +-| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5095 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1724 | +-| jaeger | the frozen tier | 1 | 8 MB | 8 MB | 1 | 21078 | +-| kafka | the frozen tier | 1 | 178 MB | 32 MB | 1 | 88688 | +-| kube-proxy | the frozen tier | 1 | 15 MB | 8 MB | 1 | 21474 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2375 | +-| metrics-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7434 | +-| opensearch | the frozen tier | 1 | 21 MB | 20 MB | 1 | 56884 | +-| opentelemetry-collector | the frozen tier | 1 | 709 MB | 120 MB | 1 | 332220 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 807 | +-| postgresql | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7519 | +-| prometheus-server | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7167 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 130 | +-| recommendation | the frozen tier | 1 | 21 MB | 1 MB | 1 | 3001 | +-| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6053 | +-| wait-for-kafka | the frozen tier | 1 | 7 MB | 1 MB | 1 | 1456 | +-| wait-for-valkey-cart | the frozen tier | 1 | 1 MB | 0 MB | 1 | 1247 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3741 | ++| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8904 | ++| ad | the frozen tier | 1 | 36 MB | 2 MB | 1 | 6144 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 170 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 809 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | ++| cart | the frozen tier | 1 | 79 MB | 2 MB | 1 | 4289 | ++| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5266 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 243 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 709 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2288 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 404 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 15612 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 604 | ++| frontend | the frozen tier | 1 | 18 MB | 12 MB | 1 | 34653 | ++| frontend-proxy | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26643 | ++| grafana | the frozen tier | 1 | 107 MB | 105 MB | 1 | 292016 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1770 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2504 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1795 | ++| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4501 | ++| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1487 | ++| jaeger | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18183 | ++| kafka | the frozen tier | 1 | 192 MB | 30 MB | 1 | 82001 | ++| kube-proxy | the frozen tier | 1 | 13 MB | 7 MB | 1 | 19177 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2049 | ++| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6413 | ++| opensearch | the frozen tier | 1 | 18 MB | 18 MB | 1 | 50179 | ++| opentelemetry-collector | the frozen tier | 1 | 772 MB | 105 MB | 1 | 291405 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 696 | ++| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6486 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6366 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 112 | ++| recommendation | the frozen tier | 1 | 24 MB | 1 MB | 1 | 2932 | ++| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6616 | ++| wait-for-kafka | the frozen tier | 1 | 6 MB | 1 MB | 1 | 1399 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1226 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3611 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.json new file mode 100644 index 0000000..77c815c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/commit.json @@ -0,0 +1 @@ +{"before":"ee058f9c351a20cf6521dbb4ebf7f387177c95a7","after":"1142b2983785d73525518e634d446e2336d4e0e1","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/latest.md new file mode 100644 index 0000000..f03decb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:19:09.000Z + +Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.27 bytes of store kept, 0.61 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.3 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 327 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 327 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 85 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8904 | +| ad | the frozen tier | 1 | 36 MB | 2 MB | 1 | 6144 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 170 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 809 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +| cart | the frozen tier | 1 | 79 MB | 2 MB | 1 | 4289 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5266 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 243 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 709 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2288 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 404 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 15612 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 604 | +| frontend | the frozen tier | 1 | 18 MB | 12 MB | 1 | 34653 | +| frontend-proxy | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26643 | +| grafana | the frozen tier | 1 | 107 MB | 105 MB | 1 | 292016 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1770 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2504 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1795 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4501 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1487 | +| jaeger | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18183 | +| kafka | the frozen tier | 1 | 192 MB | 30 MB | 1 | 82001 | +| kube-proxy | the frozen tier | 1 | 13 MB | 7 MB | 1 | 19177 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2049 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6413 | +| opensearch | the frozen tier | 1 | 18 MB | 18 MB | 1 | 50179 | +| opentelemetry-collector | the frozen tier | 1 | 772 MB | 105 MB | 1 | 291405 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 696 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6486 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6366 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 112 | +| recommendation | the frozen tier | 1 | 24 MB | 1 MB | 1 | 2932 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6616 | +| wait-for-kafka | the frozen tier | 1 | 6 MB | 1 MB | 1 | 1399 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1226 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3611 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/report.txt new file mode 100644 index 0000000..9b93685 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.27 bytes of store kept, 0.61 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.3 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 327 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:19:09.000Z + +Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.27 bytes of store kept, 0.61 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.3 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 327 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 327 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 85 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8904 | +| ad | the frozen tier | 1 | 36 MB | 2 MB | 1 | 6144 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 170 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 809 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +| cart | the frozen tier | 1 | 79 MB | 2 MB | 1 | 4289 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5266 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 243 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 709 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2288 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 404 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 15612 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 604 | +| frontend | the frozen tier | 1 | 18 MB | 12 MB | 1 | 34653 | +| frontend-proxy | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26643 | +| grafana | the frozen tier | 1 | 107 MB | 105 MB | 1 | 292016 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1770 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2504 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1795 | +| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4501 | +| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1487 | +| jaeger | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18183 | +| kafka | the frozen tier | 1 | 192 MB | 30 MB | 1 | 82001 | +| kube-proxy | the frozen tier | 1 | 13 MB | 7 MB | 1 | 19177 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2049 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6413 | +| opensearch | the frozen tier | 1 | 18 MB | 18 MB | 1 | 50179 | +| opentelemetry-collector | the frozen tier | 1 | 772 MB | 105 MB | 1 | 291405 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 696 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6486 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6366 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 112 | +| recommendation | the frozen tier | 1 | 24 MB | 1 MB | 1 | 2932 | +| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6616 | +| wait-for-kafka | the frozen tier | 1 | 6 MB | 1 MB | 1 | 1399 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1226 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3611 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/run.json new file mode 100644 index 0000000..10570a6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:19:12.559Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/totals.csv new file mode 100644 index 0000000..c6bc53c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T001908Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,8904::budget run +ad,6144::budget run +aws-eks-nodeagent,170::budget run +aws-node,809::budget run +aws-vpc-cni-init,1030::budget run +cart,4289::budget run +coredns,5266::budget run +currency,243::budget run +email,709::budget run +flagd,2288::budget run +flagd-ui,404::budget run +fluentd-10x,15612::budget run +fraud-detection,604::budget run +frontend,34653::budget run +frontend-proxy,26643::budget run +grafana,292016::budget run +grafana-sc-alerts,1770::budget run +grafana-sc-dashboard,2504::budget run +grafana-sc-datasources,1795::budget run +image-provider,4501::budget run +init-config,1487::budget run +jaeger,18183::budget run +kafka,82001::budget run +kube-proxy,19177::budget run +load-generator,2049::budget run +metrics-server,6413::budget run +opensearch,50179::budget run +opentelemetry-collector,291405::budget run +payment,696::budget run +postgresql,6486::budget run +prometheus-server,6366::budget run +quote,112::budget run +recommendation,2932::budget run +valkey-cart,6616::budget run +wait-for-kafka,1399::budget run +wait-for-valkey-cart,1226::budget run +*,3611::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.diff new file mode 100644 index 0000000..55f44bc --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.diff @@ -0,0 +1,183 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index c6bc53c..4aaf2df 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,8904::budget run +-ad,6144::budget run +-aws-eks-nodeagent,170::budget run +-aws-node,809::budget run +-aws-vpc-cni-init,1030::budget run +-cart,4289::budget run +-coredns,5266::budget run +-currency,243::budget run +-email,709::budget run +-flagd,2288::budget run +-flagd-ui,404::budget run +-fluentd-10x,15612::budget run +-fraud-detection,604::budget run +-frontend,34653::budget run +-frontend-proxy,26643::budget run +-grafana,292016::budget run +-grafana-sc-alerts,1770::budget run +-grafana-sc-dashboard,2504::budget run +-grafana-sc-datasources,1795::budget run +-image-provider,4501::budget run +-init-config,1487::budget run +-jaeger,18183::budget run +-kafka,82001::budget run +-kube-proxy,19177::budget run +-load-generator,2049::budget run +-metrics-server,6413::budget run +-opensearch,50179::budget run +-opentelemetry-collector,291405::budget run +-payment,696::budget run +-postgresql,6486::budget run +-prometheus-server,6366::budget run +-quote,112::budget run +-recommendation,2932::budget run +-valkey-cart,6616::budget run +-wait-for-kafka,1399::budget run +-wait-for-valkey-cart,1226::budget run +-*,3611::budget run ++accounting,7844::budget run ++ad,6038::budget run ++aws-eks-nodeagent,150::budget run ++aws-node,713::budget run ++aws-vpc-cni-init,907::budget run ++cart,4146::budget run ++coredns,4793::budget run ++currency,214::budget run ++email,624::budget run ++flagd,2015::budget run ++flagd-ui,356::budget run ++fluentd-10x,14235::budget run ++fraud-detection,532::budget run ++frontend,34477::budget run ++frontend-proxy,23472::budget run ++grafana,258503::budget run ++grafana-sc-alerts,1560::budget run ++grafana-sc-dashboard,2206::budget run ++grafana-sc-datasources,1581::budget run ++image-provider,3965::budget run ++init-config,1310::budget run ++jaeger,16019::budget run ++kafka,76844::budget run ++kube-proxy,17460::budget run ++load-generator,1805::budget run ++metrics-server,5650::budget run ++opensearch,44976::budget run ++opentelemetry-collector,260895::budget run ++payment,613::budget run ++postgresql,5714::budget run ++prometheus-server,5770::budget run ++quote,99::budget run ++recommendation,2881::budget run ++valkey-cart,7058::budget run ++wait-for-kafka,1356::budget run ++wait-for-valkey-cart,1159::budget run ++*,3423::budget run +diff --git a/reports/latest.md b/reports/latest.md +index f03decb..b1c9d23 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:19:09.000Z ++# Hot-tier run: 2026-10-26T00:20:09.000Z + +-Hot tier: 5 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 85 MB within 2 hours, with 992 MB a day of counted lines moved to the frozen tier. ++Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 1 indices; its tier_down lines not yet moved: 3 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 6 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.27 bytes of store kept, 0.61 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 1.3 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 327 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 2.44 bytes of store kept, 1.08 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 294 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 327 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 85 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 294 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 158 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8904 | +-| ad | the frozen tier | 1 | 36 MB | 2 MB | 1 | 6144 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 170 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 809 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +-| cart | the frozen tier | 1 | 79 MB | 2 MB | 1 | 4289 | +-| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5266 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 243 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 709 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2288 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 404 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 6 MB | 1 | 15612 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 604 | +-| frontend | the frozen tier | 1 | 18 MB | 12 MB | 1 | 34653 | +-| frontend-proxy | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26643 | +-| grafana | the frozen tier | 1 | 107 MB | 105 MB | 1 | 292016 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1770 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2504 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1795 | +-| image-provider | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4501 | +-| init-config | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1487 | +-| jaeger | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18183 | +-| kafka | the frozen tier | 1 | 192 MB | 30 MB | 1 | 82001 | +-| kube-proxy | the frozen tier | 1 | 13 MB | 7 MB | 1 | 19177 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2049 | +-| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6413 | +-| opensearch | the frozen tier | 1 | 18 MB | 18 MB | 1 | 50179 | +-| opentelemetry-collector | the frozen tier | 1 | 772 MB | 105 MB | 1 | 291405 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 696 | +-| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6486 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6366 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 112 | +-| recommendation | the frozen tier | 1 | 24 MB | 1 MB | 1 | 2932 | +-| valkey-cart | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6616 | +-| wait-for-kafka | the frozen tier | 1 | 6 MB | 1 MB | 1 | 1399 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1226 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3611 | ++| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7844 | ++| ad | the frozen tier | 1 | 39 MB | 2 MB | 1 | 6038 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 150 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 713 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 907 | ++| cart | the frozen tier | 1 | 88 MB | 1 MB | 1 | 4146 | ++| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4793 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 214 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 624 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2015 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 356 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14235 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 532 | ++| frontend | the frozen tier | 1 | 19 MB | 12 MB | 1 | 34477 | ++| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23472 | ++| grafana | the frozen tier | 1 | 96 MB | 93 MB | 1 | 258503 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1560 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2206 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1581 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3965 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1310 | ++| jaeger | the frozen tier | 1 | 6 MB | 6 MB | 1 | 16019 | ++| kafka | the frozen tier | 1 | 205 MB | 28 MB | 1 | 76844 | ++| kube-proxy | the frozen tier | 1 | 12 MB | 6 MB | 1 | 17460 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1805 | ++| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5650 | ++| opensearch | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44976 | ++| opentelemetry-collector | the frozen tier | 1 | 826 MB | 94 MB | 1 | 260895 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 613 | ++| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5714 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5770 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 99 | ++| recommendation | the frozen tier | 1 | 27 MB | 1 MB | 1 | 2881 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7058 | ++| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1356 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1159 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3423 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.json new file mode 100644 index 0000000..7ae7b18 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/commit.json @@ -0,0 +1 @@ +{"before":"1142b2983785d73525518e634d446e2336d4e0e1","after":"9a2ac1b0feb8702e9586825b0ce1a52f4808dc31","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/latest.md new file mode 100644 index 0000000..b1c9d23 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:20:09.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 6 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 2.44 bytes of store kept, 1.08 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 294 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 294 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 158 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7844 | +| ad | the frozen tier | 1 | 39 MB | 2 MB | 1 | 6038 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 150 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 713 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 907 | +| cart | the frozen tier | 1 | 88 MB | 1 MB | 1 | 4146 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4793 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 214 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 624 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2015 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 356 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14235 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 532 | +| frontend | the frozen tier | 1 | 19 MB | 12 MB | 1 | 34477 | +| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23472 | +| grafana | the frozen tier | 1 | 96 MB | 93 MB | 1 | 258503 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1560 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2206 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1581 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3965 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1310 | +| jaeger | the frozen tier | 1 | 6 MB | 6 MB | 1 | 16019 | +| kafka | the frozen tier | 1 | 205 MB | 28 MB | 1 | 76844 | +| kube-proxy | the frozen tier | 1 | 12 MB | 6 MB | 1 | 17460 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1805 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5650 | +| opensearch | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44976 | +| opentelemetry-collector | the frozen tier | 1 | 826 MB | 94 MB | 1 | 260895 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 613 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5714 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5770 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 99 | +| recommendation | the frozen tier | 1 | 27 MB | 1 MB | 1 | 2881 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7058 | +| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1356 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1159 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3423 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/report.txt new file mode 100644 index 0000000..b59f4f4 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 6 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 2.44 bytes of store kept, 1.08 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 294 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:20:09.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 6 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 2.44 bytes of store kept, 1.08 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 294 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 294 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 158 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7844 | +| ad | the frozen tier | 1 | 39 MB | 2 MB | 1 | 6038 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 150 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 713 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 907 | +| cart | the frozen tier | 1 | 88 MB | 1 MB | 1 | 4146 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4793 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 214 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 624 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2015 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 356 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14235 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 532 | +| frontend | the frozen tier | 1 | 19 MB | 12 MB | 1 | 34477 | +| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23472 | +| grafana | the frozen tier | 1 | 96 MB | 93 MB | 1 | 258503 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1560 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2206 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1581 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3965 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1310 | +| jaeger | the frozen tier | 1 | 6 MB | 6 MB | 1 | 16019 | +| kafka | the frozen tier | 1 | 205 MB | 28 MB | 1 | 76844 | +| kube-proxy | the frozen tier | 1 | 12 MB | 6 MB | 1 | 17460 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1805 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5650 | +| opensearch | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44976 | +| opentelemetry-collector | the frozen tier | 1 | 826 MB | 94 MB | 1 | 260895 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 613 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5714 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5770 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 99 | +| recommendation | the frozen tier | 1 | 27 MB | 1 MB | 1 | 2881 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7058 | +| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1356 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1159 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3423 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/run.json new file mode 100644 index 0000000..356eead --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:20:12.384Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/totals.csv new file mode 100644 index 0000000..4aaf2df --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002009Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,7844::budget run +ad,6038::budget run +aws-eks-nodeagent,150::budget run +aws-node,713::budget run +aws-vpc-cni-init,907::budget run +cart,4146::budget run +coredns,4793::budget run +currency,214::budget run +email,624::budget run +flagd,2015::budget run +flagd-ui,356::budget run +fluentd-10x,14235::budget run +fraud-detection,532::budget run +frontend,34477::budget run +frontend-proxy,23472::budget run +grafana,258503::budget run +grafana-sc-alerts,1560::budget run +grafana-sc-dashboard,2206::budget run +grafana-sc-datasources,1581::budget run +image-provider,3965::budget run +init-config,1310::budget run +jaeger,16019::budget run +kafka,76844::budget run +kube-proxy,17460::budget run +load-generator,1805::budget run +metrics-server,5650::budget run +opensearch,44976::budget run +opentelemetry-collector,260895::budget run +payment,613::budget run +postgresql,5714::budget run +prometheus-server,5770::budget run +quote,99::budget run +recommendation,2881::budget run +valkey-cart,7058::budget run +wait-for-kafka,1356::budget run +wait-for-valkey-cart,1159::budget run +*,3423::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.diff new file mode 100644 index 0000000..5927557 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 4aaf2df..abd84ef 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,7844::budget run +-ad,6038::budget run +-aws-eks-nodeagent,150::budget run +-aws-node,713::budget run +-aws-vpc-cni-init,907::budget run +-cart,4146::budget run +-coredns,4793::budget run +-currency,214::budget run +-email,624::budget run +-flagd,2015::budget run +-flagd-ui,356::budget run +-fluentd-10x,14235::budget run +-fraud-detection,532::budget run +-frontend,34477::budget run +-frontend-proxy,23472::budget run +-grafana,258503::budget run +-grafana-sc-alerts,1560::budget run +-grafana-sc-dashboard,2206::budget run +-grafana-sc-datasources,1581::budget run +-image-provider,3965::budget run +-init-config,1310::budget run +-jaeger,16019::budget run +-kafka,76844::budget run +-kube-proxy,17460::budget run +-load-generator,1805::budget run +-metrics-server,5650::budget run +-opensearch,44976::budget run +-opentelemetry-collector,260895::budget run +-payment,613::budget run +-postgresql,5714::budget run +-prometheus-server,5770::budget run +-quote,99::budget run +-recommendation,2881::budget run +-valkey-cart,7058::budget run +-wait-for-kafka,1356::budget run +-wait-for-valkey-cart,1159::budget run +-*,3423::budget run ++accounting,7010::budget run ++ad,5955::budget run ++aws-eks-nodeagent,134::budget run ++aws-node,637::budget run ++aws-vpc-cni-init,811::budget run ++cart,4033::budget run ++coredns,4421::budget run ++currency,191::budget run ++email,558::budget run ++flagd,1801::budget run ++flagd-ui,318::budget run ++fluentd-10x,14184::budget run ++fraud-detection,476::budget run ++frontend,34338::budget run ++frontend-proxy,20975::budget run ++grafana,232242::budget run ++grafana-sc-alerts,1394::budget run ++grafana-sc-dashboard,1971::budget run ++grafana-sc-datasources,1413::budget run ++image-provider,3543::budget run ++init-config,1171::budget run ++jaeger,14315::budget run ++kafka,72784::budget run ++kube-proxy,16109::budget run ++load-generator,1613::budget run ++metrics-server,5049::budget run ++opensearch,41262::budget run ++opentelemetry-collector,236874::budget run ++payment,548::budget run ++postgresql,5106::budget run ++prometheus-server,5590::budget run ++quote,88::budget run ++recommendation,2840::budget run ++valkey-cart,7271::budget run ++wait-for-kafka,1322::budget run ++wait-for-valkey-cart,1035::budget run ++*,3192::budget run +diff --git a/reports/latest.md b/reports/latest.md +index b1c9d23..511915a 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:20:09.000Z ++# Hot-tier run: 2026-10-26T00:21:09.000Z + +-Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 158 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. ++Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 6 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 4 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 2.44 bytes of store kept, 1.08 as tier_down (measured on the indices on hot). ++- Each counted byte takes 2.34 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 294 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 270 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 294 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 158 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 270 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 111 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7844 | +-| ad | the frozen tier | 1 | 39 MB | 2 MB | 1 | 6038 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 150 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 713 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 907 | +-| cart | the frozen tier | 1 | 88 MB | 1 MB | 1 | 4146 | +-| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4793 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 214 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 624 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2015 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 356 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14235 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 532 | +-| frontend | the frozen tier | 1 | 19 MB | 12 MB | 1 | 34477 | +-| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 23472 | +-| grafana | the frozen tier | 1 | 96 MB | 93 MB | 1 | 258503 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1560 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2206 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1581 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3965 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1310 | +-| jaeger | the frozen tier | 1 | 6 MB | 6 MB | 1 | 16019 | +-| kafka | the frozen tier | 1 | 205 MB | 28 MB | 1 | 76844 | +-| kube-proxy | the frozen tier | 1 | 12 MB | 6 MB | 1 | 17460 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1805 | +-| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5650 | +-| opensearch | the frozen tier | 1 | 16 MB | 16 MB | 1 | 44976 | +-| opentelemetry-collector | the frozen tier | 1 | 826 MB | 94 MB | 1 | 260895 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 613 | +-| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5714 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5770 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 99 | +-| recommendation | the frozen tier | 1 | 27 MB | 1 MB | 1 | 2881 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7058 | +-| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1356 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1159 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3423 | ++| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7010 | ++| ad | the frozen tier | 1 | 40 MB | 2 MB | 1 | 5955 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 637 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 811 | ++| cart | the frozen tier | 1 | 94 MB | 1 MB | 1 | 4033 | ++| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4421 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 191 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 558 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1801 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 318 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14184 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 476 | ++| frontend | the frozen tier | 1 | 21 MB | 12 MB | 1 | 34338 | ++| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 20975 | ++| grafana | the frozen tier | 1 | 87 MB | 84 MB | 1 | 232242 | ++| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1394 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1971 | ++| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1413 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3543 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | ++| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14315 | ++| kafka | the frozen tier | 1 | 213 MB | 26 MB | 1 | 72784 | ++| kube-proxy | the frozen tier | 1 | 11 MB | 6 MB | 1 | 16109 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1613 | ++| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5049 | ++| opensearch | the frozen tier | 1 | 15 MB | 15 MB | 1 | 41262 | ++| opentelemetry-collector | the frozen tier | 1 | 861 MB | 85 MB | 1 | 236874 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 548 | ++| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5106 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5590 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 88 | ++| recommendation | the frozen tier | 1 | 29 MB | 1 MB | 1 | 2840 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7271 | ++| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1322 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1035 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3192 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.json new file mode 100644 index 0000000..d5993f9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/commit.json @@ -0,0 +1 @@ +{"before":"9a2ac1b0feb8702e9586825b0ce1a52f4808dc31","after":"bdd584edda39a3913bf210dd96714051a38b304b","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/latest.md new file mode 100644 index 0000000..511915a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:21:09.000Z + +Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 4 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 2.34 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 270 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 270 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 111 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7010 | +| ad | the frozen tier | 1 | 40 MB | 2 MB | 1 | 5955 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 637 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 811 | +| cart | the frozen tier | 1 | 94 MB | 1 MB | 1 | 4033 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4421 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 191 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 558 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1801 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 318 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14184 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 476 | +| frontend | the frozen tier | 1 | 21 MB | 12 MB | 1 | 34338 | +| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 20975 | +| grafana | the frozen tier | 1 | 87 MB | 84 MB | 1 | 232242 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1394 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1971 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1413 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3543 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14315 | +| kafka | the frozen tier | 1 | 213 MB | 26 MB | 1 | 72784 | +| kube-proxy | the frozen tier | 1 | 11 MB | 6 MB | 1 | 16109 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1613 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5049 | +| opensearch | the frozen tier | 1 | 15 MB | 15 MB | 1 | 41262 | +| opentelemetry-collector | the frozen tier | 1 | 861 MB | 85 MB | 1 | 236874 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 548 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5106 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5590 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 88 | +| recommendation | the frozen tier | 1 | 29 MB | 1 MB | 1 | 2840 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7271 | +| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1322 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1035 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3192 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/report.txt new file mode 100644 index 0000000..2562da0 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 4 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 2.34 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 270 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:21:09.000Z + +Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 4 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 2.34 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 270 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 270 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 111 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7010 | +| ad | the frozen tier | 1 | 40 MB | 2 MB | 1 | 5955 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 637 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 811 | +| cart | the frozen tier | 1 | 94 MB | 1 MB | 1 | 4033 | +| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4421 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 191 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 558 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1801 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 318 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14184 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 476 | +| frontend | the frozen tier | 1 | 21 MB | 12 MB | 1 | 34338 | +| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 20975 | +| grafana | the frozen tier | 1 | 87 MB | 84 MB | 1 | 232242 | +| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1394 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1971 | +| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1413 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3543 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14315 | +| kafka | the frozen tier | 1 | 213 MB | 26 MB | 1 | 72784 | +| kube-proxy | the frozen tier | 1 | 11 MB | 6 MB | 1 | 16109 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1613 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5049 | +| opensearch | the frozen tier | 1 | 15 MB | 15 MB | 1 | 41262 | +| opentelemetry-collector | the frozen tier | 1 | 861 MB | 85 MB | 1 | 236874 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 548 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5106 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5590 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 88 | +| recommendation | the frozen tier | 1 | 29 MB | 1 MB | 1 | 2840 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7271 | +| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1322 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1035 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3192 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/run.json new file mode 100644 index 0000000..a99a062 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:21:12.345Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/totals.csv new file mode 100644 index 0000000..abd84ef --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002108Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,7010::budget run +ad,5955::budget run +aws-eks-nodeagent,134::budget run +aws-node,637::budget run +aws-vpc-cni-init,811::budget run +cart,4033::budget run +coredns,4421::budget run +currency,191::budget run +email,558::budget run +flagd,1801::budget run +flagd-ui,318::budget run +fluentd-10x,14184::budget run +fraud-detection,476::budget run +frontend,34338::budget run +frontend-proxy,20975::budget run +grafana,232242::budget run +grafana-sc-alerts,1394::budget run +grafana-sc-dashboard,1971::budget run +grafana-sc-datasources,1413::budget run +image-provider,3543::budget run +init-config,1171::budget run +jaeger,14315::budget run +kafka,72784::budget run +kube-proxy,16109::budget run +load-generator,1613::budget run +metrics-server,5049::budget run +opensearch,41262::budget run +opentelemetry-collector,236874::budget run +payment,548::budget run +postgresql,5106::budget run +prometheus-server,5590::budget run +quote,88::budget run +recommendation,2840::budget run +valkey-cart,7271::budget run +wait-for-kafka,1322::budget run +wait-for-valkey-cart,1035::budget run +*,3192::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.diff new file mode 100644 index 0000000..78f387b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.diff @@ -0,0 +1,183 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index abd84ef..e999cd0 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,7010::budget run +-ad,5955::budget run +-aws-eks-nodeagent,134::budget run +-aws-node,637::budget run +-aws-vpc-cni-init,811::budget run +-cart,4033::budget run +-coredns,4421::budget run +-currency,191::budget run +-email,558::budget run +-flagd,1801::budget run +-flagd-ui,318::budget run +-fluentd-10x,14184::budget run +-fraud-detection,476::budget run +-frontend,34338::budget run +-frontend-proxy,20975::budget run +-grafana,232242::budget run +-grafana-sc-alerts,1394::budget run +-grafana-sc-dashboard,1971::budget run +-grafana-sc-datasources,1413::budget run +-image-provider,3543::budget run +-init-config,1171::budget run +-jaeger,14315::budget run +-kafka,72784::budget run +-kube-proxy,16109::budget run +-load-generator,1613::budget run +-metrics-server,5049::budget run +-opensearch,41262::budget run +-opentelemetry-collector,236874::budget run +-payment,548::budget run +-postgresql,5106::budget run +-prometheus-server,5590::budget run +-quote,88::budget run +-recommendation,2840::budget run +-valkey-cart,7271::budget run +-wait-for-kafka,1322::budget run +-wait-for-valkey-cart,1035::budget run +-*,3192::budget run ++accounting,6346::budget run ++ad,5889::budget run ++aws-eks-nodeagent,121::budget run ++aws-node,576::budget run ++aws-vpc-cni-init,734::budget run ++cart,3942::budget run ++coredns,4125::budget run ++currency,173::budget run ++email,505::budget run ++flagd,1630::budget run ++flagd-ui,288::budget run ++fluentd-10x,14024::budget run ++fraud-detection,430::budget run ++frontend,34227::budget run ++frontend-proxy,18989::budget run ++grafana,211560::budget run ++grafana-sc-alerts,1262::budget run ++grafana-sc-dashboard,1784::budget run ++grafana-sc-datasources,1279::budget run ++image-provider,3208::budget run ++init-config,1060::budget run ++jaeger,12960::budget run ++kafka,69554::budget run ++kube-proxy,15034::budget run ++load-generator,1460::budget run ++metrics-server,4571::budget run ++opensearch,37911::budget run ++opentelemetry-collector,217765::budget run ++payment,496::budget run ++postgresql,4623::budget run ++prometheus-server,5320::budget run ++quote,80::budget run ++recommendation,2808::budget run ++valkey-cart,7193::budget run ++wait-for-kafka,1295::budget run ++wait-for-valkey-cart,937::budget run ++*,3008::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 511915a..c09b236 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:21:09.000Z ++# Hot-tier run: 2026-10-26T00:22:08.000Z + +-Hot tier: 9 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 111 MB within 2 hours, with 1.1 GB a day of counted lines moved to the frozen tier. ++Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 1 indices; its tier_down lines not yet moved: 4 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 2 indices; its tier_down lines not yet moved: 10 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 2.34 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 1.4 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 270 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.17 bytes of store kept, 1.20 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 250 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 270 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 111 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 250 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 146 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7010 | +-| ad | the frozen tier | 1 | 40 MB | 2 MB | 1 | 5955 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 637 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 811 | +-| cart | the frozen tier | 1 | 94 MB | 1 MB | 1 | 4033 | +-| coredns | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4421 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 191 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 558 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1801 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 318 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14184 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 476 | +-| frontend | the frozen tier | 1 | 21 MB | 12 MB | 1 | 34338 | +-| frontend-proxy | the frozen tier | 1 | 8 MB | 8 MB | 1 | 20975 | +-| grafana | the frozen tier | 1 | 87 MB | 84 MB | 1 | 232242 | +-| grafana-sc-alerts | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1394 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1971 | +-| grafana-sc-datasources | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1413 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3543 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1171 | +-| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14315 | +-| kafka | the frozen tier | 1 | 213 MB | 26 MB | 1 | 72784 | +-| kube-proxy | the frozen tier | 1 | 11 MB | 6 MB | 1 | 16109 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1613 | +-| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5049 | +-| opensearch | the frozen tier | 1 | 15 MB | 15 MB | 1 | 41262 | +-| opentelemetry-collector | the frozen tier | 1 | 861 MB | 85 MB | 1 | 236874 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 548 | +-| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5106 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5590 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 88 | +-| recommendation | the frozen tier | 1 | 29 MB | 1 MB | 1 | 2840 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7271 | +-| wait-for-kafka | the frozen tier | 1 | 5 MB | 0 MB | 1 | 1322 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1035 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3192 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6346 | ++| ad | the frozen tier | 1 | 43 MB | 2 MB | 1 | 5889 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 121 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 576 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 734 | ++| cart | the frozen tier | 1 | 98 MB | 1 MB | 1 | 3942 | ++| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 4125 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 173 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 505 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1630 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 288 | ++| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14024 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 430 | ++| frontend | the frozen tier | 1 | 22 MB | 12 MB | 1 | 34227 | ++| frontend-proxy | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18989 | ++| grafana | the frozen tier | 1 | 79 MB | 76 MB | 1 | 211560 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1784 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1279 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3208 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1060 | ++| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12960 | ++| kafka | the frozen tier | 1 | 220 MB | 25 MB | 1 | 69554 | ++| kube-proxy | the frozen tier | 1 | 10 MB | 5 MB | 1 | 15034 | ++| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1460 | ++| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4571 | ++| opensearch | the frozen tier | 1 | 14 MB | 14 MB | 1 | 37911 | ++| opentelemetry-collector | the frozen tier | 1 | 897 MB | 78 MB | 1 | 217765 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 496 | ++| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4623 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5320 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 80 | ++| recommendation | the frozen tier | 1 | 31 MB | 1 MB | 1 | 2808 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7193 | ++| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1295 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 937 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3008 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.json new file mode 100644 index 0000000..564bb35 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/commit.json @@ -0,0 +1 @@ +{"before":"bdd584edda39a3913bf210dd96714051a38b304b","after":"9f9729f27515d4a4921495cafd93544e476a69e0","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/latest.md new file mode 100644 index 0000000..c09b236 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:22:08.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 2 indices; its tier_down lines not yet moved: 10 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.17 bytes of store kept, 1.20 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 250 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 250 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 146 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6346 | +| ad | the frozen tier | 1 | 43 MB | 2 MB | 1 | 5889 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 121 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 576 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 734 | +| cart | the frozen tier | 1 | 98 MB | 1 MB | 1 | 3942 | +| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 4125 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 173 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 505 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1630 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 288 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14024 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 430 | +| frontend | the frozen tier | 1 | 22 MB | 12 MB | 1 | 34227 | +| frontend-proxy | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18989 | +| grafana | the frozen tier | 1 | 79 MB | 76 MB | 1 | 211560 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1784 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1279 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3208 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1060 | +| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12960 | +| kafka | the frozen tier | 1 | 220 MB | 25 MB | 1 | 69554 | +| kube-proxy | the frozen tier | 1 | 10 MB | 5 MB | 1 | 15034 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1460 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4571 | +| opensearch | the frozen tier | 1 | 14 MB | 14 MB | 1 | 37911 | +| opentelemetry-collector | the frozen tier | 1 | 897 MB | 78 MB | 1 | 217765 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 496 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4623 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5320 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 80 | +| recommendation | the frozen tier | 1 | 31 MB | 1 MB | 1 | 2808 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7193 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1295 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 937 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3008 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/report.txt new file mode 100644 index 0000000..21c65c2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 2 indices; its tier_down lines not yet moved: 10 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.17 bytes of store kept, 1.20 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 250 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:22:08.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 2 indices; its tier_down lines not yet moved: 10 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.17 bytes of store kept, 1.20 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 250 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 250 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 146 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6346 | +| ad | the frozen tier | 1 | 43 MB | 2 MB | 1 | 5889 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 121 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 576 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 734 | +| cart | the frozen tier | 1 | 98 MB | 1 MB | 1 | 3942 | +| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 4125 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 173 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 505 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1630 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 288 | +| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14024 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 430 | +| frontend | the frozen tier | 1 | 22 MB | 12 MB | 1 | 34227 | +| frontend-proxy | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18989 | +| grafana | the frozen tier | 1 | 79 MB | 76 MB | 1 | 211560 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1784 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1279 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3208 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1060 | +| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12960 | +| kafka | the frozen tier | 1 | 220 MB | 25 MB | 1 | 69554 | +| kube-proxy | the frozen tier | 1 | 10 MB | 5 MB | 1 | 15034 | +| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1460 | +| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4571 | +| opensearch | the frozen tier | 1 | 14 MB | 14 MB | 1 | 37911 | +| opentelemetry-collector | the frozen tier | 1 | 897 MB | 78 MB | 1 | 217765 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 496 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4623 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5320 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 80 | +| recommendation | the frozen tier | 1 | 31 MB | 1 MB | 1 | 2808 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7193 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1295 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 937 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3008 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/run.json new file mode 100644 index 0000000..73a1d7f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:22:11.706Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/totals.csv new file mode 100644 index 0000000..e999cd0 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002208Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,6346::budget run +ad,5889::budget run +aws-eks-nodeagent,121::budget run +aws-node,576::budget run +aws-vpc-cni-init,734::budget run +cart,3942::budget run +coredns,4125::budget run +currency,173::budget run +email,505::budget run +flagd,1630::budget run +flagd-ui,288::budget run +fluentd-10x,14024::budget run +fraud-detection,430::budget run +frontend,34227::budget run +frontend-proxy,18989::budget run +grafana,211560::budget run +grafana-sc-alerts,1262::budget run +grafana-sc-dashboard,1784::budget run +grafana-sc-datasources,1279::budget run +image-provider,3208::budget run +init-config,1060::budget run +jaeger,12960::budget run +kafka,69554::budget run +kube-proxy,15034::budget run +load-generator,1460::budget run +metrics-server,4571::budget run +opensearch,37911::budget run +opentelemetry-collector,217765::budget run +payment,496::budget run +postgresql,4623::budget run +prometheus-server,5320::budget run +quote,80::budget run +recommendation,2808::budget run +valkey-cart,7193::budget run +wait-for-kafka,1295::budget run +wait-for-valkey-cart,937::budget run +*,3008::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.diff new file mode 100644 index 0000000..3e7eef2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index e999cd0..76eabb7 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,6346::budget run +-ad,5889::budget run +-aws-eks-nodeagent,121::budget run +-aws-node,576::budget run +-aws-vpc-cni-init,734::budget run +-cart,3942::budget run +-coredns,4125::budget run +-currency,173::budget run +-email,505::budget run +-flagd,1630::budget run +-flagd-ui,288::budget run +-fluentd-10x,14024::budget run +-fraud-detection,430::budget run +-frontend,34227::budget run +-frontend-proxy,18989::budget run +-grafana,211560::budget run +-grafana-sc-alerts,1262::budget run +-grafana-sc-dashboard,1784::budget run +-grafana-sc-datasources,1279::budget run +-image-provider,3208::budget run +-init-config,1060::budget run +-jaeger,12960::budget run +-kafka,69554::budget run +-kube-proxy,15034::budget run +-load-generator,1460::budget run +-metrics-server,4571::budget run +-opensearch,37911::budget run +-opentelemetry-collector,217765::budget run +-payment,496::budget run +-postgresql,4623::budget run +-prometheus-server,5320::budget run +-quote,80::budget run +-recommendation,2808::budget run +-valkey-cart,7193::budget run +-wait-for-kafka,1295::budget run +-wait-for-valkey-cart,937::budget run +-*,3008::budget run ++accounting,5747::budget run ++ad,5829::budget run ++aws-eks-nodeagent,110::budget run ++aws-node,522::budget run ++aws-vpc-cni-init,665::budget run ++cart,3862::budget run ++coredns,3858::budget run ++currency,156::budget run ++email,457::budget run ++flagd,1476::budget run ++flagd-ui,261::budget run ++fluentd-10x,13245::budget run ++fraud-detection,390::budget run ++frontend,34127::budget run ++frontend-proxy,17195::budget run ++grafana,192810::budget run ++grafana-sc-alerts,1142::budget run ++grafana-sc-dashboard,1616::budget run ++grafana-sc-datasources,1158::budget run ++image-provider,2905::budget run ++init-config,960::budget run ++jaeger,11735::budget run ++kafka,66640::budget run ++kube-proxy,14063::budget run ++load-generator,1322::budget run ++metrics-server,4139::budget run ++opensearch,34702::budget run ++opentelemetry-collector,200507::budget run ++payment,449::budget run ++postgresql,4186::budget run ++prometheus-server,4820::budget run ++quote,72::budget run ++recommendation,2779::budget run ++valkey-cart,7123::budget run ++wait-for-kafka,1271::budget run ++wait-for-valkey-cart,849::budget run ++*,2842::budget run +diff --git a/reports/latest.md b/reports/latest.md +index c09b236..c1f02fa 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:22:08.000Z ++# Hot-tier run: 2026-10-26T00:23:13.000Z + +-Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 146 MB within 2 hours, with 1.2 GB a day of counted lines moved to the frozen tier. ++Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 2 MB in 2 indices; its tier_down lines not yet moved: 10 MB in 2. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 11 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.17 bytes of store kept, 1.20 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.20 bytes of store kept, 1.10 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 250 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 232 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 250 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 146 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 232 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 138 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 6346 | +-| ad | the frozen tier | 1 | 43 MB | 2 MB | 1 | 5889 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 121 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 576 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 734 | +-| cart | the frozen tier | 1 | 98 MB | 1 MB | 1 | 3942 | +-| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 4125 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 173 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 505 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1630 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 288 | +-| fluentd-10x | the frozen tier | 1 | 14 MB | 5 MB | 1 | 14024 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 430 | +-| frontend | the frozen tier | 1 | 22 MB | 12 MB | 1 | 34227 | +-| frontend-proxy | the frozen tier | 1 | 7 MB | 7 MB | 1 | 18989 | +-| grafana | the frozen tier | 1 | 79 MB | 76 MB | 1 | 211560 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1784 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1279 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3208 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1060 | +-| jaeger | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12960 | +-| kafka | the frozen tier | 1 | 220 MB | 25 MB | 1 | 69554 | +-| kube-proxy | the frozen tier | 1 | 10 MB | 5 MB | 1 | 15034 | +-| load-generator | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1460 | +-| metrics-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4571 | +-| opensearch | the frozen tier | 1 | 14 MB | 14 MB | 1 | 37911 | +-| opentelemetry-collector | the frozen tier | 1 | 897 MB | 78 MB | 1 | 217765 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 496 | +-| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4623 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5320 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 80 | +-| recommendation | the frozen tier | 1 | 31 MB | 1 MB | 1 | 2808 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7193 | +-| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1295 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 937 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 3008 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5747 | ++| ad | the frozen tier | 1 | 45 MB | 2 MB | 1 | 5829 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 110 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 522 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 665 | ++| cart | the frozen tier | 1 | 103 MB | 1 MB | 1 | 3862 | ++| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 3858 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 156 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 457 | ++| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1476 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 261 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 13245 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | ++| frontend | the frozen tier | 1 | 23 MB | 12 MB | 1 | 34127 | ++| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 17195 | ++| grafana | the frozen tier | 1 | 73 MB | 69 MB | 1 | 192810 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1142 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1616 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1158 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2905 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | ++| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11735 | ++| kafka | the frozen tier | 1 | 225 MB | 24 MB | 1 | 66640 | ++| kube-proxy | the frozen tier | 1 | 9 MB | 5 MB | 1 | 14063 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1322 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4139 | ++| opensearch | the frozen tier | 1 | 13 MB | 12 MB | 1 | 34702 | ++| opentelemetry-collector | the frozen tier | 1 | 923 MB | 72 MB | 1 | 200507 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 449 | ++| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4186 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4820 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 72 | ++| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2779 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7123 | ++| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1271 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 849 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2842 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.json new file mode 100644 index 0000000..bf0a8af --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/commit.json @@ -0,0 +1 @@ +{"before":"9f9729f27515d4a4921495cafd93544e476a69e0","after":"f2bec2d3ce3661d12bbf371e2342fc6f93e6b593","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/latest.md new file mode 100644 index 0000000..c1f02fa --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:23:13.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 11 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.20 bytes of store kept, 1.10 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 232 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 232 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 138 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5747 | +| ad | the frozen tier | 1 | 45 MB | 2 MB | 1 | 5829 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 110 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 522 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 665 | +| cart | the frozen tier | 1 | 103 MB | 1 MB | 1 | 3862 | +| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 3858 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 156 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 457 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1476 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 261 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 13245 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +| frontend | the frozen tier | 1 | 23 MB | 12 MB | 1 | 34127 | +| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 17195 | +| grafana | the frozen tier | 1 | 73 MB | 69 MB | 1 | 192810 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1142 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1616 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1158 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2905 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11735 | +| kafka | the frozen tier | 1 | 225 MB | 24 MB | 1 | 66640 | +| kube-proxy | the frozen tier | 1 | 9 MB | 5 MB | 1 | 14063 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1322 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4139 | +| opensearch | the frozen tier | 1 | 13 MB | 12 MB | 1 | 34702 | +| opentelemetry-collector | the frozen tier | 1 | 923 MB | 72 MB | 1 | 200507 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 449 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4186 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4820 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 72 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2779 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7123 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1271 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 849 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2842 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/report.txt new file mode 100644 index 0000000..9cbaea2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 11 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.20 bytes of store kept, 1.10 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 232 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:23:13.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 11 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.20 bytes of store kept, 1.10 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 232 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 232 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 138 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5747 | +| ad | the frozen tier | 1 | 45 MB | 2 MB | 1 | 5829 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 110 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 522 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 665 | +| cart | the frozen tier | 1 | 103 MB | 1 MB | 1 | 3862 | +| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 3858 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 156 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 457 | +| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1476 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 261 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 13245 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +| frontend | the frozen tier | 1 | 23 MB | 12 MB | 1 | 34127 | +| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 17195 | +| grafana | the frozen tier | 1 | 73 MB | 69 MB | 1 | 192810 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1142 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1616 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1158 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2905 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11735 | +| kafka | the frozen tier | 1 | 225 MB | 24 MB | 1 | 66640 | +| kube-proxy | the frozen tier | 1 | 9 MB | 5 MB | 1 | 14063 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1322 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4139 | +| opensearch | the frozen tier | 1 | 13 MB | 12 MB | 1 | 34702 | +| opentelemetry-collector | the frozen tier | 1 | 923 MB | 72 MB | 1 | 200507 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 449 | +| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4186 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4820 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 72 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2779 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7123 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1271 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 849 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2842 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/run.json new file mode 100644 index 0000000..8b3be11 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:23:16.128Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/totals.csv new file mode 100644 index 0000000..76eabb7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002313Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,5747::budget run +ad,5829::budget run +aws-eks-nodeagent,110::budget run +aws-node,522::budget run +aws-vpc-cni-init,665::budget run +cart,3862::budget run +coredns,3858::budget run +currency,156::budget run +email,457::budget run +flagd,1476::budget run +flagd-ui,261::budget run +fluentd-10x,13245::budget run +fraud-detection,390::budget run +frontend,34127::budget run +frontend-proxy,17195::budget run +grafana,192810::budget run +grafana-sc-alerts,1142::budget run +grafana-sc-dashboard,1616::budget run +grafana-sc-datasources,1158::budget run +image-provider,2905::budget run +init-config,960::budget run +jaeger,11735::budget run +kafka,66640::budget run +kube-proxy,14063::budget run +load-generator,1322::budget run +metrics-server,4139::budget run +opensearch,34702::budget run +opentelemetry-collector,200507::budget run +payment,449::budget run +postgresql,4186::budget run +prometheus-server,4820::budget run +quote,72::budget run +recommendation,2779::budget run +valkey-cart,7123::budget run +wait-for-kafka,1271::budget run +wait-for-valkey-cart,849::budget run +*,2842::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.diff new file mode 100644 index 0000000..5bc14e3 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 76eabb7..b85be66 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,5747::budget run +-ad,5829::budget run +-aws-eks-nodeagent,110::budget run +-aws-node,522::budget run +-aws-vpc-cni-init,665::budget run +-cart,3862::budget run +-coredns,3858::budget run +-currency,156::budget run +-email,457::budget run +-flagd,1476::budget run +-flagd-ui,261::budget run +-fluentd-10x,13245::budget run +-fraud-detection,390::budget run +-frontend,34127::budget run +-frontend-proxy,17195::budget run +-grafana,192810::budget run +-grafana-sc-alerts,1142::budget run +-grafana-sc-dashboard,1616::budget run +-grafana-sc-datasources,1158::budget run +-image-provider,2905::budget run +-init-config,960::budget run +-jaeger,11735::budget run +-kafka,66640::budget run +-kube-proxy,14063::budget run +-load-generator,1322::budget run +-metrics-server,4139::budget run +-opensearch,34702::budget run +-opentelemetry-collector,200507::budget run +-payment,449::budget run +-postgresql,4186::budget run +-prometheus-server,4820::budget run +-quote,72::budget run +-recommendation,2779::budget run +-valkey-cart,7123::budget run +-wait-for-kafka,1271::budget run +-wait-for-valkey-cart,849::budget run +-*,2842::budget run ++accounting,5293::budget run ++ad,5784::budget run ++aws-eks-nodeagent,101::budget run ++aws-node,481::budget run ++aws-vpc-cni-init,612::budget run ++cart,3801::budget run ++coredns,3655::budget run ++currency,144::budget run ++email,421::budget run ++flagd,1360::budget run ++flagd-ui,240::budget run ++fluentd-10x,12656::budget run ++fraud-detection,359::budget run ++frontend,34051::budget run ++frontend-proxy,15837::budget run ++grafana,178420::budget run ++grafana-sc-alerts,1052::budget run ++grafana-sc-dashboard,1488::budget run ++grafana-sc-datasources,1067::budget run ++image-provider,2675::budget run ++init-config,884::budget run ++jaeger,10809::budget run ++kafka,64436::budget run ++kube-proxy,13328::budget run ++load-generator,1218::budget run ++metrics-server,3812::budget run ++opensearch,32073::budget run ++opentelemetry-collector,187441::budget run ++payment,414::budget run ++postgresql,3855::budget run ++prometheus-server,4548::budget run ++quote,67::budget run ++recommendation,2757::budget run ++valkey-cart,7071::budget run ++wait-for-kafka,1253::budget run ++wait-for-valkey-cart,782::budget run ++*,2716::budget run +diff --git a/reports/latest.md b/reports/latest.md +index c1f02fa..5c51c5b 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:23:13.000Z ++# Hot-tier run: 2026-10-26T00:24:12.000Z + +-Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 138 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. ++Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 11 MB in 2. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.20 bytes of store kept, 1.10 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.38 bytes of store kept, 1.09 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 232 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 218 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 232 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 138 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 218 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 143 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5747 | +-| ad | the frozen tier | 1 | 45 MB | 2 MB | 1 | 5829 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 110 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 522 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 665 | +-| cart | the frozen tier | 1 | 103 MB | 1 MB | 1 | 3862 | +-| coredns | the frozen tier | 1 | 2 MB | 1 MB | 1 | 3858 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 156 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 457 | +-| flagd | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1476 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 261 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 13245 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 390 | +-| frontend | the frozen tier | 1 | 23 MB | 12 MB | 1 | 34127 | +-| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 17195 | +-| grafana | the frozen tier | 1 | 73 MB | 69 MB | 1 | 192810 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1142 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1616 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1158 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2905 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 960 | +-| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11735 | +-| kafka | the frozen tier | 1 | 225 MB | 24 MB | 1 | 66640 | +-| kube-proxy | the frozen tier | 1 | 9 MB | 5 MB | 1 | 14063 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1322 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4139 | +-| opensearch | the frozen tier | 1 | 13 MB | 12 MB | 1 | 34702 | +-| opentelemetry-collector | the frozen tier | 1 | 923 MB | 72 MB | 1 | 200507 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 449 | +-| postgresql | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4186 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4820 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 72 | +-| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2779 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7123 | +-| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1271 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 849 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2842 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5293 | ++| ad | the frozen tier | 1 | 46 MB | 2 MB | 1 | 5784 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 101 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 481 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 612 | ++| cart | the frozen tier | 1 | 107 MB | 1 MB | 1 | 3801 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3655 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 144 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 421 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1360 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 240 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 12656 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 359 | ++| frontend | the frozen tier | 1 | 24 MB | 12 MB | 1 | 34051 | ++| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 15837 | ++| grafana | the frozen tier | 1 | 68 MB | 64 MB | 1 | 178420 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1052 | ++| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1488 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1067 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2675 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 884 | ++| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10809 | ++| kafka | the frozen tier | 1 | 230 MB | 23 MB | 1 | 64436 | ++| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 13328 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1218 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3812 | ++| opensearch | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32073 | ++| opentelemetry-collector | the frozen tier | 1 | 939 MB | 67 MB | 1 | 187441 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 414 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3855 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4548 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 67 | ++| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2757 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7071 | ++| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1253 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 782 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2716 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.json new file mode 100644 index 0000000..0196487 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/commit.json @@ -0,0 +1 @@ +{"before":"f2bec2d3ce3661d12bbf371e2342fc6f93e6b593","after":"2ce259a177b753a0651d30d40ad14706d29f4f71","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/latest.md new file mode 100644 index 0000000..5c51c5b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:24:12.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.38 bytes of store kept, 1.09 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 218 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 218 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 143 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5293 | +| ad | the frozen tier | 1 | 46 MB | 2 MB | 1 | 5784 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 101 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 481 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 612 | +| cart | the frozen tier | 1 | 107 MB | 1 MB | 1 | 3801 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3655 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 144 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 421 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1360 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 240 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 12656 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 359 | +| frontend | the frozen tier | 1 | 24 MB | 12 MB | 1 | 34051 | +| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 15837 | +| grafana | the frozen tier | 1 | 68 MB | 64 MB | 1 | 178420 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1052 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1488 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1067 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2675 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 884 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10809 | +| kafka | the frozen tier | 1 | 230 MB | 23 MB | 1 | 64436 | +| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 13328 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1218 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3812 | +| opensearch | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32073 | +| opentelemetry-collector | the frozen tier | 1 | 939 MB | 67 MB | 1 | 187441 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 414 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3855 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4548 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 67 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2757 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7071 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1253 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 782 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2716 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/report.txt new file mode 100644 index 0000000..ebc9061 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.38 bytes of store kept, 1.09 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 218 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:24:12.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.38 bytes of store kept, 1.09 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 218 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 218 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 143 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5293 | +| ad | the frozen tier | 1 | 46 MB | 2 MB | 1 | 5784 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 101 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 481 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 612 | +| cart | the frozen tier | 1 | 107 MB | 1 MB | 1 | 3801 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3655 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 144 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 421 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1360 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 240 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 12656 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 359 | +| frontend | the frozen tier | 1 | 24 MB | 12 MB | 1 | 34051 | +| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 15837 | +| grafana | the frozen tier | 1 | 68 MB | 64 MB | 1 | 178420 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1052 | +| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1488 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1067 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2675 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 884 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10809 | +| kafka | the frozen tier | 1 | 230 MB | 23 MB | 1 | 64436 | +| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 13328 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1218 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3812 | +| opensearch | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32073 | +| opentelemetry-collector | the frozen tier | 1 | 939 MB | 67 MB | 1 | 187441 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 414 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3855 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4548 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 67 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2757 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7071 | +| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1253 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 782 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2716 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/run.json new file mode 100644 index 0000000..8c51b74 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:24:15.085Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/totals.csv new file mode 100644 index 0000000..b85be66 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002412Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,5293::budget run +ad,5784::budget run +aws-eks-nodeagent,101::budget run +aws-node,481::budget run +aws-vpc-cni-init,612::budget run +cart,3801::budget run +coredns,3655::budget run +currency,144::budget run +email,421::budget run +flagd,1360::budget run +flagd-ui,240::budget run +fluentd-10x,12656::budget run +fraud-detection,359::budget run +frontend,34051::budget run +frontend-proxy,15837::budget run +grafana,178420::budget run +grafana-sc-alerts,1052::budget run +grafana-sc-dashboard,1488::budget run +grafana-sc-datasources,1067::budget run +image-provider,2675::budget run +init-config,884::budget run +jaeger,10809::budget run +kafka,64436::budget run +kube-proxy,13328::budget run +load-generator,1218::budget run +metrics-server,3812::budget run +opensearch,32073::budget run +opentelemetry-collector,187441::budget run +payment,414::budget run +postgresql,3855::budget run +prometheus-server,4548::budget run +quote,67::budget run +recommendation,2757::budget run +valkey-cart,7071::budget run +wait-for-kafka,1253::budget run +wait-for-valkey-cart,782::budget run +*,2716::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.diff new file mode 100644 index 0000000..df5779f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.diff @@ -0,0 +1,181 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index b85be66..fa65bf7 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,5293::budget run +-ad,5784::budget run +-aws-eks-nodeagent,101::budget run +-aws-node,481::budget run +-aws-vpc-cni-init,612::budget run +-cart,3801::budget run +-coredns,3655::budget run +-currency,144::budget run +-email,421::budget run +-flagd,1360::budget run +-flagd-ui,240::budget run +-fluentd-10x,12656::budget run +-fraud-detection,359::budget run +-frontend,34051::budget run +-frontend-proxy,15837::budget run +-grafana,178420::budget run +-grafana-sc-alerts,1052::budget run +-grafana-sc-dashboard,1488::budget run +-grafana-sc-datasources,1067::budget run +-image-provider,2675::budget run +-init-config,884::budget run +-jaeger,10809::budget run +-kafka,64436::budget run +-kube-proxy,13328::budget run +-load-generator,1218::budget run +-metrics-server,3812::budget run +-opensearch,32073::budget run +-opentelemetry-collector,187441::budget run +-payment,414::budget run +-postgresql,3855::budget run +-prometheus-server,4548::budget run +-quote,67::budget run +-recommendation,2757::budget run +-valkey-cart,7071::budget run +-wait-for-kafka,1253::budget run +-wait-for-valkey-cart,782::budget run +-*,2716::budget run ++accounting,4912::budget run ++ad,5746::budget run ++aws-eks-nodeagent,94::budget run ++aws-node,446::budget run ++aws-vpc-cni-init,568::budget run ++cart,3750::budget run ++coredns,3485::budget run ++currency,134::budget run ++email,391::budget run ++flagd,1262::budget run ++flagd-ui,223::budget run ++fluentd-10x,12161::budget run ++fraud-detection,333::budget run ++frontend,33987::budget run ++frontend-proxy,14696::budget run ++grafana,166340::budget run ++grafana-sc-alerts,976::budget run ++grafana-sc-dashboard,1381::budget run ++grafana-sc-datasources,990::budget run ++image-provider,2483::budget run ++init-config,820::budget run ++jaeger,10030::budget run ++kafka,62586::budget run ++kube-proxy,12710::budget run ++load-generator,1130::budget run ++metrics-server,3537::budget run ++opensearch,30067::budget run ++opentelemetry-collector,176464::budget run ++payment,384::budget run ++postgresql,3578::budget run ++prometheus-server,4502::budget run ++quote,62::budget run ++recommendation,2738::budget run ++valkey-cart,7026::budget run ++wait-for-kafka,1237::budget run ++wait-for-valkey-cart,725::budget run ++*,2610::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 5c51c5b..f91cee5 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:24:12.000Z ++# Hot-tier run: 2026-10-26T00:25:10.000Z + +-Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 143 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. ++Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.38 bytes of store kept, 1.09 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.25 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 218 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 206 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 218 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 143 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 206 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 133 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 5293 | +-| ad | the frozen tier | 1 | 46 MB | 2 MB | 1 | 5784 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 101 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 481 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 612 | +-| cart | the frozen tier | 1 | 107 MB | 1 MB | 1 | 3801 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3655 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 144 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 421 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1360 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 240 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 5 MB | 1 | 12656 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 359 | +-| frontend | the frozen tier | 1 | 24 MB | 12 MB | 1 | 34051 | +-| frontend-proxy | the frozen tier | 1 | 6 MB | 6 MB | 1 | 15837 | +-| grafana | the frozen tier | 1 | 68 MB | 64 MB | 1 | 178420 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1052 | +-| grafana-sc-dashboard | the frozen tier | 1 | 1 MB | 1 MB | 1 | 1488 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1067 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2675 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 884 | +-| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10809 | +-| kafka | the frozen tier | 1 | 230 MB | 23 MB | 1 | 64436 | +-| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 13328 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1218 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3812 | +-| opensearch | the frozen tier | 1 | 12 MB | 12 MB | 1 | 32073 | +-| opentelemetry-collector | the frozen tier | 1 | 939 MB | 67 MB | 1 | 187441 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 414 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3855 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4548 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 67 | +-| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2757 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7071 | +-| wait-for-kafka | the frozen tier | 1 | 4 MB | 0 MB | 1 | 1253 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 782 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2716 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4912 | ++| ad | the frozen tier | 1 | 47 MB | 2 MB | 1 | 5746 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 94 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 446 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 568 | ++| cart | the frozen tier | 1 | 111 MB | 1 MB | 1 | 3750 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3485 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 391 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 223 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 12161 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | ++| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33987 | ++| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14696 | ++| grafana | the frozen tier | 1 | 63 MB | 60 MB | 1 | 166340 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 976 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1381 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 990 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2483 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 820 | ++| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10030 | ++| kafka | the frozen tier | 1 | 233 MB | 23 MB | 1 | 62586 | ++| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 12710 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1130 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3537 | ++| opensearch | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30067 | ++| opentelemetry-collector | the frozen tier | 1 | 957 MB | 64 MB | 1 | 176464 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 384 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3578 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4502 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 62 | ++| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2738 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7026 | ++| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1237 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 725 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2610 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.json new file mode 100644 index 0000000..4860a34 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/commit.json @@ -0,0 +1 @@ +{"before":"2ce259a177b753a0651d30d40ad14706d29f4f71","after":"c50b3ed2068a410b712650c9b6d1b372f6eb9361","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/latest.md new file mode 100644 index 0000000..f91cee5 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:25:10.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.25 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 206 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 206 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 133 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4912 | +| ad | the frozen tier | 1 | 47 MB | 2 MB | 1 | 5746 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 94 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 446 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 568 | +| cart | the frozen tier | 1 | 111 MB | 1 MB | 1 | 3750 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3485 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 391 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 223 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 12161 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33987 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14696 | +| grafana | the frozen tier | 1 | 63 MB | 60 MB | 1 | 166340 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 976 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1381 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 990 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2483 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 820 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10030 | +| kafka | the frozen tier | 1 | 233 MB | 23 MB | 1 | 62586 | +| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 12710 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1130 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3537 | +| opensearch | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30067 | +| opentelemetry-collector | the frozen tier | 1 | 957 MB | 64 MB | 1 | 176464 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 384 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3578 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4502 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 62 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2738 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7026 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1237 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 725 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2610 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/report.txt new file mode 100644 index 0000000..3dddbd0 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.25 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 206 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:25:10.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.25 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 206 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 206 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 133 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4912 | +| ad | the frozen tier | 1 | 47 MB | 2 MB | 1 | 5746 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 94 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 446 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 568 | +| cart | the frozen tier | 1 | 111 MB | 1 MB | 1 | 3750 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3485 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 391 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 223 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 12161 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33987 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14696 | +| grafana | the frozen tier | 1 | 63 MB | 60 MB | 1 | 166340 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 976 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1381 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 990 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2483 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 820 | +| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10030 | +| kafka | the frozen tier | 1 | 233 MB | 23 MB | 1 | 62586 | +| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 12710 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1130 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3537 | +| opensearch | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30067 | +| opentelemetry-collector | the frozen tier | 1 | 957 MB | 64 MB | 1 | 176464 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 384 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3578 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4502 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 62 | +| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2738 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7026 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1237 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 725 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2610 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/run.json new file mode 100644 index 0000000..5a4388e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:25:13.480Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/totals.csv new file mode 100644 index 0000000..fa65bf7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002510Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,4912::budget run +ad,5746::budget run +aws-eks-nodeagent,94::budget run +aws-node,446::budget run +aws-vpc-cni-init,568::budget run +cart,3750::budget run +coredns,3485::budget run +currency,134::budget run +email,391::budget run +flagd,1262::budget run +flagd-ui,223::budget run +fluentd-10x,12161::budget run +fraud-detection,333::budget run +frontend,33987::budget run +frontend-proxy,14696::budget run +grafana,166340::budget run +grafana-sc-alerts,976::budget run +grafana-sc-dashboard,1381::budget run +grafana-sc-datasources,990::budget run +image-provider,2483::budget run +init-config,820::budget run +jaeger,10030::budget run +kafka,62586::budget run +kube-proxy,12710::budget run +load-generator,1130::budget run +metrics-server,3537::budget run +opensearch,30067::budget run +opentelemetry-collector,176464::budget run +payment,384::budget run +postgresql,3578::budget run +prometheus-server,4502::budget run +quote,62::budget run +recommendation,2738::budget run +valkey-cart,7026::budget run +wait-for-kafka,1237::budget run +wait-for-valkey-cart,725::budget run +*,2610::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.diff new file mode 100644 index 0000000..7d59e65 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.diff @@ -0,0 +1,182 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index fa65bf7..199b92a 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,4912::budget run +-ad,5746::budget run +-aws-eks-nodeagent,94::budget run +-aws-node,446::budget run +-aws-vpc-cni-init,568::budget run +-cart,3750::budget run +-coredns,3485::budget run +-currency,134::budget run +-email,391::budget run +-flagd,1262::budget run +-flagd-ui,223::budget run +-fluentd-10x,12161::budget run +-fraud-detection,333::budget run +-frontend,33987::budget run +-frontend-proxy,14696::budget run +-grafana,166340::budget run +-grafana-sc-alerts,976::budget run +-grafana-sc-dashboard,1381::budget run +-grafana-sc-datasources,990::budget run +-image-provider,2483::budget run +-init-config,820::budget run +-jaeger,10030::budget run +-kafka,62586::budget run +-kube-proxy,12710::budget run +-load-generator,1130::budget run +-metrics-server,3537::budget run +-opensearch,30067::budget run +-opentelemetry-collector,176464::budget run +-payment,384::budget run +-postgresql,3578::budget run +-prometheus-server,4502::budget run +-quote,62::budget run +-recommendation,2738::budget run +-valkey-cart,7026::budget run +-wait-for-kafka,1237::budget run +-wait-for-valkey-cart,725::budget run +-*,2610::budget run ++accounting,4576::budget run ++ad,5712::budget run ++aws-eks-nodeagent,87::budget run ++aws-node,416::budget run ++aws-vpc-cni-init,529::budget run ++cart,3704::budget run ++coredns,3335::budget run ++currency,124::budget run ++email,364::budget run ++flagd,1175::budget run ++flagd-ui,208::budget run ++fluentd-10x,11725::budget run ++fraud-detection,310::budget run ++frontend,33931::budget run ++frontend-proxy,13693::budget run ++grafana,156007::budget run ++grafana-sc-alerts,910::budget run ++grafana-sc-dashboard,1287::budget run ++grafana-sc-datasources,922::budget run ++image-provider,2313::budget run ++init-config,764::budget run ++jaeger,9345::budget run ++kafka,60957::budget run ++kube-proxy,12167::budget run ++load-generator,1053::budget run ++metrics-server,3296::budget run ++opensearch,28546::budget run ++opentelemetry-collector,166809::budget run ++payment,358::budget run ++postgresql,3333::budget run ++prometheus-server,4310::budget run ++quote,58::budget run ++recommendation,2722::budget run ++valkey-cart,6987::budget run ++wait-for-kafka,1224::budget run ++wait-for-valkey-cart,676::budget run ++*,2518::budget run +diff --git a/reports/latest.md b/reports/latest.md +index f91cee5..a9276a7 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:25:10.000Z ++# Hot-tier run: 2026-10-26T00:26:09.000Z + +-Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 133 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. ++Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 2. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.25 bytes of store kept, 1.01 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.28 bytes of store kept, 0.95 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 206 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 196 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 206 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 133 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 196 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 128 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4912 | +-| ad | the frozen tier | 1 | 47 MB | 2 MB | 1 | 5746 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 94 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 446 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 568 | +-| cart | the frozen tier | 1 | 111 MB | 1 MB | 1 | 3750 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3485 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 134 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 391 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1262 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 223 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 12161 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +-| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33987 | +-| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 14696 | +-| grafana | the frozen tier | 1 | 63 MB | 60 MB | 1 | 166340 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 976 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1381 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 990 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2483 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 820 | +-| jaeger | the frozen tier | 1 | 4 MB | 4 MB | 1 | 10030 | +-| kafka | the frozen tier | 1 | 233 MB | 23 MB | 1 | 62586 | +-| kube-proxy | the frozen tier | 1 | 8 MB | 5 MB | 1 | 12710 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1130 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3537 | +-| opensearch | the frozen tier | 1 | 11 MB | 11 MB | 1 | 30067 | +-| opentelemetry-collector | the frozen tier | 1 | 957 MB | 64 MB | 1 | 176464 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 384 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3578 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4502 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 62 | +-| recommendation | the frozen tier | 1 | 33 MB | 1 MB | 1 | 2738 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 7026 | +-| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1237 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 725 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2610 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4576 | ++| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5712 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 87 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 416 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | ++| cart | the frozen tier | 1 | 113 MB | 1 MB | 1 | 3704 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3335 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 124 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1175 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 208 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11725 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 310 | ++| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33931 | ++| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13693 | ++| grafana | the frozen tier | 1 | 60 MB | 56 MB | 1 | 156007 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 910 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1287 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2313 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 764 | ++| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 9345 | ++| kafka | the frozen tier | 1 | 236 MB | 22 MB | 1 | 60957 | ++| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 12167 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1053 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3296 | ++| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 28546 | ++| opentelemetry-collector | the frozen tier | 1 | 972 MB | 60 MB | 1 | 166809 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 358 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3333 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4310 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 58 | ++| recommendation | the frozen tier | 1 | 34 MB | 1 MB | 1 | 2722 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6987 | ++| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1224 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 676 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2518 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.json new file mode 100644 index 0000000..8665853 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/commit.json @@ -0,0 +1 @@ +{"before":"c50b3ed2068a410b712650c9b6d1b372f6eb9361","after":"20a17566f950916eec1fab37d48e0d4b52d32cba","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/latest.md new file mode 100644 index 0000000..a9276a7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:26:09.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.28 bytes of store kept, 0.95 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 196 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 196 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 128 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4576 | +| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5712 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 87 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 416 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +| cart | the frozen tier | 1 | 113 MB | 1 MB | 1 | 3704 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3335 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 124 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1175 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 208 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11725 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 310 | +| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33931 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13693 | +| grafana | the frozen tier | 1 | 60 MB | 56 MB | 1 | 156007 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 910 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1287 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2313 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 764 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 9345 | +| kafka | the frozen tier | 1 | 236 MB | 22 MB | 1 | 60957 | +| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 12167 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1053 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3296 | +| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 28546 | +| opentelemetry-collector | the frozen tier | 1 | 972 MB | 60 MB | 1 | 166809 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 358 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3333 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4310 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 58 | +| recommendation | the frozen tier | 1 | 34 MB | 1 MB | 1 | 2722 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6987 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1224 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 676 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2518 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/report.txt new file mode 100644 index 0000000..9b0490d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.28 bytes of store kept, 0.95 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 196 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:26:09.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.28 bytes of store kept, 0.95 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 196 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 196 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 128 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4576 | +| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5712 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 87 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 416 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +| cart | the frozen tier | 1 | 113 MB | 1 MB | 1 | 3704 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3335 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 124 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1175 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 208 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11725 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 310 | +| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33931 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13693 | +| grafana | the frozen tier | 1 | 60 MB | 56 MB | 1 | 156007 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 910 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1287 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2313 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 764 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 9345 | +| kafka | the frozen tier | 1 | 236 MB | 22 MB | 1 | 60957 | +| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 12167 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1053 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3296 | +| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 28546 | +| opentelemetry-collector | the frozen tier | 1 | 972 MB | 60 MB | 1 | 166809 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 358 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3333 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4310 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 58 | +| recommendation | the frozen tier | 1 | 34 MB | 1 MB | 1 | 2722 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6987 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1224 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 676 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2518 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/run.json new file mode 100644 index 0000000..775e43e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:26:12.142Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/totals.csv new file mode 100644 index 0000000..199b92a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002609Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,4576::budget run +ad,5712::budget run +aws-eks-nodeagent,87::budget run +aws-node,416::budget run +aws-vpc-cni-init,529::budget run +cart,3704::budget run +coredns,3335::budget run +currency,124::budget run +email,364::budget run +flagd,1175::budget run +flagd-ui,208::budget run +fluentd-10x,11725::budget run +fraud-detection,310::budget run +frontend,33931::budget run +frontend-proxy,13693::budget run +grafana,156007::budget run +grafana-sc-alerts,910::budget run +grafana-sc-dashboard,1287::budget run +grafana-sc-datasources,922::budget run +image-provider,2313::budget run +init-config,764::budget run +jaeger,9345::budget run +kafka,60957::budget run +kube-proxy,12167::budget run +load-generator,1053::budget run +metrics-server,3296::budget run +opensearch,28546::budget run +opentelemetry-collector,166809::budget run +payment,358::budget run +postgresql,3333::budget run +prometheus-server,4310::budget run +quote,58::budget run +recommendation,2722::budget run +valkey-cart,6987::budget run +wait-for-kafka,1224::budget run +wait-for-valkey-cart,676::budget run +*,2518::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.diff new file mode 100644 index 0000000..29f32db --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.diff @@ -0,0 +1,183 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 199b92a..78afeeb 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,4576::budget run +-ad,5712::budget run +-aws-eks-nodeagent,87::budget run +-aws-node,416::budget run +-aws-vpc-cni-init,529::budget run +-cart,3704::budget run +-coredns,3335::budget run +-currency,124::budget run +-email,364::budget run +-flagd,1175::budget run +-flagd-ui,208::budget run +-fluentd-10x,11725::budget run +-fraud-detection,310::budget run +-frontend,33931::budget run +-frontend-proxy,13693::budget run +-grafana,156007::budget run +-grafana-sc-alerts,910::budget run +-grafana-sc-dashboard,1287::budget run +-grafana-sc-datasources,922::budget run +-image-provider,2313::budget run +-init-config,764::budget run +-jaeger,9345::budget run +-kafka,60957::budget run +-kube-proxy,12167::budget run +-load-generator,1053::budget run +-metrics-server,3296::budget run +-opensearch,28546::budget run +-opentelemetry-collector,166809::budget run +-payment,358::budget run +-postgresql,3333::budget run +-prometheus-server,4310::budget run +-quote,58::budget run +-recommendation,2722::budget run +-valkey-cart,6987::budget run +-wait-for-kafka,1224::budget run +-wait-for-valkey-cart,676::budget run +-*,2518::budget run ++accounting,4261::budget run ++ad,5681::budget run ++aws-eks-nodeagent,81::budget run ++aws-node,387::budget run ++aws-vpc-cni-init,493::budget run ++cart,3661::budget run ++coredns,3105::budget run ++currency,116::budget run ++email,339::budget run ++flagd,1094::budget run ++flagd-ui,193::budget run ++fluentd-10x,11315::budget run ++fraud-detection,289::budget run ++frontend,33879::budget run ++frontend-proxy,12749::budget run ++grafana,145931::budget run ++grafana-sc-alerts,847::budget run ++grafana-sc-dashboard,1198::budget run ++grafana-sc-datasources,859::budget run ++image-provider,2154::budget run ++init-config,711::budget run ++jaeger,8701::budget run ++kafka,59424::budget run ++kube-proxy,11656::budget run ++load-generator,980::budget run ++metrics-server,3068::budget run ++opensearch,26762::budget run ++opentelemetry-collector,157724::budget run ++payment,333::budget run ++postgresql,3103::budget run ++prometheus-server,4101::budget run ++quote,54::budget run ++recommendation,2707::budget run ++valkey-cart,6950::budget run ++wait-for-kafka,1211::budget run ++wait-for-valkey-cart,629::budget run ++*,2430::budget run +diff --git a/reports/latest.md b/reports/latest.md +index a9276a7..0419425 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:26:09.000Z ++# Hot-tier run: 2026-10-26T00:27:13.000Z + +-Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 128 MB within 2 hours, with 1.3 GB a day of counted lines moved to the frozen tier. ++Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 2. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.28 bytes of store kept, 0.95 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 1.5 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 196 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.29 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 186 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 196 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 128 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 186 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4576 | +-| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5712 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 87 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 416 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 529 | +-| cart | the frozen tier | 1 | 113 MB | 1 MB | 1 | 3704 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3335 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 124 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1175 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 208 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11725 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 310 | +-| frontend | the frozen tier | 1 | 26 MB | 12 MB | 1 | 33931 | +-| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 13693 | +-| grafana | the frozen tier | 1 | 60 MB | 56 MB | 1 | 156007 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 910 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1287 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2313 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 764 | +-| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 9345 | +-| kafka | the frozen tier | 1 | 236 MB | 22 MB | 1 | 60957 | +-| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 12167 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1053 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3296 | +-| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 28546 | +-| opentelemetry-collector | the frozen tier | 1 | 972 MB | 60 MB | 1 | 166809 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 358 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3333 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4310 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 58 | +-| recommendation | the frozen tier | 1 | 34 MB | 1 MB | 1 | 2722 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6987 | +-| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1224 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 676 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2518 | ++| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | ++| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5681 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 81 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 387 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 493 | ++| cart | the frozen tier | 1 | 115 MB | 1 MB | 1 | 3661 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3105 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 116 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 339 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1094 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 193 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11315 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 289 | ++| frontend | the frozen tier | 1 | 27 MB | 12 MB | 1 | 33879 | ++| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12749 | ++| grafana | the frozen tier | 1 | 56 MB | 53 MB | 1 | 145931 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 847 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1198 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 859 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2154 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 711 | ++| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8701 | ++| kafka | the frozen tier | 1 | 239 MB | 21 MB | 1 | 59424 | ++| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 11656 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 980 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3068 | ++| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26762 | ++| opentelemetry-collector | the frozen tier | 1 | 986 MB | 57 MB | 1 | 157724 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3103 | ++| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4101 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 54 | ++| recommendation | the frozen tier | 1 | 35 MB | 1 MB | 1 | 2707 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6950 | ++| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1211 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 629 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2430 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.json new file mode 100644 index 0000000..41e4f92 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/commit.json @@ -0,0 +1 @@ +{"before":"20a17566f950916eec1fab37d48e0d4b52d32cba","after":"82bd4fb4729c3b7ca6442d2d1811919257a19633","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/latest.md new file mode 100644 index 0000000..0419425 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:27:13.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.29 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 186 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 186 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5681 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 81 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 387 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 493 | +| cart | the frozen tier | 1 | 115 MB | 1 MB | 1 | 3661 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3105 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 116 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 339 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1094 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 193 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11315 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 289 | +| frontend | the frozen tier | 1 | 27 MB | 12 MB | 1 | 33879 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12749 | +| grafana | the frozen tier | 1 | 56 MB | 53 MB | 1 | 145931 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 847 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1198 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 859 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2154 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 711 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8701 | +| kafka | the frozen tier | 1 | 239 MB | 21 MB | 1 | 59424 | +| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 11656 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 980 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3068 | +| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26762 | +| opentelemetry-collector | the frozen tier | 1 | 986 MB | 57 MB | 1 | 157724 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3103 | +| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4101 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 54 | +| recommendation | the frozen tier | 1 | 35 MB | 1 MB | 1 | 2707 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6950 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1211 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 629 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2430 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/report.txt new file mode 100644 index 0000000..4e927d7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.29 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 186 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:27:13.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.29 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 186 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 186 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5681 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 81 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 387 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 493 | +| cart | the frozen tier | 1 | 115 MB | 1 MB | 1 | 3661 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3105 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 116 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 339 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1094 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 193 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11315 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 289 | +| frontend | the frozen tier | 1 | 27 MB | 12 MB | 1 | 33879 | +| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12749 | +| grafana | the frozen tier | 1 | 56 MB | 53 MB | 1 | 145931 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 847 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1198 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 859 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2154 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 711 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8701 | +| kafka | the frozen tier | 1 | 239 MB | 21 MB | 1 | 59424 | +| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 11656 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 980 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3068 | +| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26762 | +| opentelemetry-collector | the frozen tier | 1 | 986 MB | 57 MB | 1 | 157724 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3103 | +| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4101 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 54 | +| recommendation | the frozen tier | 1 | 35 MB | 1 MB | 1 | 2707 | +| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6950 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1211 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 629 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2430 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/run.json new file mode 100644 index 0000000..7fabb8b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:27:15.840Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/totals.csv new file mode 100644 index 0000000..78afeeb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002712Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,4261::budget run +ad,5681::budget run +aws-eks-nodeagent,81::budget run +aws-node,387::budget run +aws-vpc-cni-init,493::budget run +cart,3661::budget run +coredns,3105::budget run +currency,116::budget run +email,339::budget run +flagd,1094::budget run +flagd-ui,193::budget run +fluentd-10x,11315::budget run +fraud-detection,289::budget run +frontend,33879::budget run +frontend-proxy,12749::budget run +grafana,145931::budget run +grafana-sc-alerts,847::budget run +grafana-sc-dashboard,1198::budget run +grafana-sc-datasources,859::budget run +image-provider,2154::budget run +init-config,711::budget run +jaeger,8701::budget run +kafka,59424::budget run +kube-proxy,11656::budget run +load-generator,980::budget run +metrics-server,3068::budget run +opensearch,26762::budget run +opentelemetry-collector,157724::budget run +payment,333::budget run +postgresql,3103::budget run +prometheus-server,4101::budget run +quote,54::budget run +recommendation,2707::budget run +valkey-cart,6950::budget run +wait-for-kafka,1211::budget run +wait-for-valkey-cart,629::budget run +*,2430::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/caps.csv new file mode 100644 index 0000000..f92f886 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1::budget run +ad,1::budget run +aws-eks-nodeagent,1::budget run +aws-node,1::budget run +aws-vpc-cni-init,1::budget run +cart,1::budget run +coredns,1::budget run +currency,1::budget run +email,1::budget run +flagd,1::budget run +flagd-ui,1::budget run +fluentd-10x,1::budget run +fraud-detection,1::budget run +frontend,1::budget run +frontend-proxy,1::budget run +grafana,1::budget run +grafana-sc-alerts,1::budget run +grafana-sc-dashboard,1::budget run +grafana-sc-datasources,1::budget run +image-provider,1::budget run +init-config,1::budget run +jaeger,1::budget run +kafka,1::budget run +kube-proxy,1::budget run +load-generator,1::budget run +metrics-server,1::budget run +opensearch,1::budget run +opentelemetry-collector,1::budget run +payment,1::budget run +postgresql,1::budget run +prometheus-server,1::budget run +quote,1::budget run +recommendation,1::budget run +valkey-cart,1::budget run +wait-for-kafka,1::budget run +wait-for-valkey-cart,1::budget run +*,1::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.diff new file mode 100644 index 0000000..4e95586 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.diff @@ -0,0 +1,181 @@ +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 78afeeb..57a56b7 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,4261::budget run +-ad,5681::budget run +-aws-eks-nodeagent,81::budget run +-aws-node,387::budget run +-aws-vpc-cni-init,493::budget run +-cart,3661::budget run +-coredns,3105::budget run +-currency,116::budget run +-email,339::budget run +-flagd,1094::budget run +-flagd-ui,193::budget run +-fluentd-10x,11315::budget run +-fraud-detection,289::budget run +-frontend,33879::budget run +-frontend-proxy,12749::budget run +-grafana,145931::budget run +-grafana-sc-alerts,847::budget run +-grafana-sc-dashboard,1198::budget run +-grafana-sc-datasources,859::budget run +-image-provider,2154::budget run +-init-config,711::budget run +-jaeger,8701::budget run +-kafka,59424::budget run +-kube-proxy,11656::budget run +-load-generator,980::budget run +-metrics-server,3068::budget run +-opensearch,26762::budget run +-opentelemetry-collector,157724::budget run +-payment,333::budget run +-postgresql,3103::budget run +-prometheus-server,4101::budget run +-quote,54::budget run +-recommendation,2707::budget run +-valkey-cart,6950::budget run +-wait-for-kafka,1211::budget run +-wait-for-valkey-cart,629::budget run +-*,2430::budget run ++accounting,4010::budget run ++ad,5656::budget run ++aws-eks-nodeagent,76::budget run ++aws-node,364::budget run ++aws-vpc-cni-init,464::budget run ++cart,3627::budget run ++coredns,2923::budget run ++currency,109::budget run ++email,319::budget run ++flagd,1030::budget run ++flagd-ui,182::budget run ++fluentd-10x,10989::budget run ++fraud-detection,272::budget run ++frontend,33837::budget run ++frontend-proxy,11999::budget run ++grafana,138583::budget run ++grafana-sc-alerts,797::budget run ++grafana-sc-dashboard,1127::budget run ++grafana-sc-datasources,808::budget run ++image-provider,2027::budget run ++init-config,670::budget run ++jaeger,8189::budget run ++kafka,58207::budget run ++kube-proxy,11250::budget run ++load-generator,922::budget run ++metrics-server,2888::budget run ++opensearch,25520::budget run ++opentelemetry-collector,150509::budget run ++payment,313::budget run ++postgresql,2921::budget run ++prometheus-server,3988::budget run ++quote,50::budget run ++recommendation,2695::budget run ++valkey-cart,6921::budget run ++wait-for-kafka,1201::budget run ++wait-for-valkey-cart,592::budget run ++*,2361::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 0419425..c72568e 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,54 @@ +-# Hot-tier run: 2026-10-26T00:27:13.000Z ++# Hot-tier run: 2026-10-26T00:28:11.000Z + +-Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.4 GB a day of counted lines moved to the frozen tier. ++Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.29 bytes of store kept, 0.60 as tier_down (measured on the indices on hot). ++- Each counted byte takes 1.45 bytes of store kept, 0.55 as tier_down (measured on the indices on hot). + - The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 186 MB a day on hot whatever the limits; the size holds down to that floor. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 179 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 186 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. ++- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 179 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. + - Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 2 MB | 2 MB | 1 | 4261 | +-| ad | the frozen tier | 1 | 49 MB | 2 MB | 1 | 5681 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 81 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 387 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 493 | +-| cart | the frozen tier | 1 | 115 MB | 1 MB | 1 | 3661 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3105 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 116 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 339 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1094 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 193 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 11315 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 289 | +-| frontend | the frozen tier | 1 | 27 MB | 12 MB | 1 | 33879 | +-| frontend-proxy | the frozen tier | 1 | 5 MB | 5 MB | 1 | 12749 | +-| grafana | the frozen tier | 1 | 56 MB | 53 MB | 1 | 145931 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 847 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1198 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 859 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2154 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 711 | +-| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8701 | +-| kafka | the frozen tier | 1 | 239 MB | 21 MB | 1 | 59424 | +-| kube-proxy | the frozen tier | 1 | 7 MB | 4 MB | 1 | 11656 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 980 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3068 | +-| opensearch | the frozen tier | 1 | 10 MB | 10 MB | 1 | 26762 | +-| opentelemetry-collector | the frozen tier | 1 | 986 MB | 57 MB | 1 | 157724 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 333 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3103 | +-| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4101 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 54 | +-| recommendation | the frozen tier | 1 | 35 MB | 1 MB | 1 | 2707 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 3 MB | 1 | 6950 | +-| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1211 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 629 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2430 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4010 | ++| ad | the frozen tier | 1 | 51 MB | 2 MB | 1 | 5656 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 76 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 464 | ++| cart | the frozen tier | 1 | 125 MB | 1 MB | 1 | 3627 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2923 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 109 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 319 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 182 | ++| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 10989 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 272 | ++| frontend | the frozen tier | 1 | 29 MB | 12 MB | 1 | 33837 | ++| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11999 | ++| grafana | the frozen tier | 1 | 54 MB | 50 MB | 1 | 138583 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 797 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1127 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 808 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2027 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 670 | ++| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8189 | ++| kafka | the frozen tier | 1 | 254 MB | 21 MB | 1 | 58207 | ++| kube-proxy | the frozen tier | 1 | 6 MB | 4 MB | 1 | 11250 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2888 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 1 | 25520 | ++| opentelemetry-collector | the frozen tier | 1 | 1 GB | 54 MB | 1 | 150509 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 313 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2921 | ++| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3988 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 50 | ++| recommendation | the frozen tier | 1 | 37 MB | 1 MB | 1 | 2695 | ++| valkey-cart | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6921 | ++| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1201 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 592 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2361 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.json new file mode 100644 index 0000000..7f76808 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/commit.json @@ -0,0 +1 @@ +{"before":"82bd4fb4729c3b7ca6442d2d1811919257a19633","after":"b38595b6f85a4836e82df549be73476fb17d161f","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/config-generation.csv new file mode 100644 index 0000000..89e536b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,4236ef75e377 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/latest.md new file mode 100644 index 0000000..c72568e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/latest.md @@ -0,0 +1,54 @@ +# Hot-tier run: 2026-10-26T00:28:11.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.45 bytes of store kept, 0.55 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 179 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 179 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4010 | +| ad | the frozen tier | 1 | 51 MB | 2 MB | 1 | 5656 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 76 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 464 | +| cart | the frozen tier | 1 | 125 MB | 1 MB | 1 | 3627 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2923 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 109 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 319 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 182 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 10989 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 272 | +| frontend | the frozen tier | 1 | 29 MB | 12 MB | 1 | 33837 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11999 | +| grafana | the frozen tier | 1 | 54 MB | 50 MB | 1 | 138583 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 797 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1127 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 808 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2027 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 670 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8189 | +| kafka | the frozen tier | 1 | 254 MB | 21 MB | 1 | 58207 | +| kube-proxy | the frozen tier | 1 | 6 MB | 4 MB | 1 | 11250 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2888 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 1 | 25520 | +| opentelemetry-collector | the frozen tier | 1 | 1 GB | 54 MB | 1 | 150509 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 313 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2921 | +| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3988 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 50 | +| recommendation | the frozen tier | 1 | 37 MB | 1 MB | 1 | 2695 | +| valkey-cart | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6921 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1201 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 592 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2361 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/report.txt new file mode 100644 index 0000000..a32666d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/report.txt @@ -0,0 +1,63 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +[tenx-recur] Each counted byte takes 1.45 bytes of store kept, 0.55 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 179 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:28:11.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +- Each counted byte takes 1.45 bytes of store kept, 0.55 as tier_down (measured on the indices on hot). +- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 179 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 179 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. +- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4010 | +| ad | the frozen tier | 1 | 51 MB | 2 MB | 1 | 5656 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 76 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 464 | +| cart | the frozen tier | 1 | 125 MB | 1 MB | 1 | 3627 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2923 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 109 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 319 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 182 | +| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 10989 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 272 | +| frontend | the frozen tier | 1 | 29 MB | 12 MB | 1 | 33837 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11999 | +| grafana | the frozen tier | 1 | 54 MB | 50 MB | 1 | 138583 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 797 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1127 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 808 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2027 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 670 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8189 | +| kafka | the frozen tier | 1 | 254 MB | 21 MB | 1 | 58207 | +| kube-proxy | the frozen tier | 1 | 6 MB | 4 MB | 1 | 11250 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2888 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 1 | 25520 | +| opentelemetry-collector | the frozen tier | 1 | 1 GB | 54 MB | 1 | 150509 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 313 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2921 | +| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3988 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 50 | +| recommendation | the frozen tier | 1 | 37 MB | 1 MB | 1 | 2695 | +| valkey-cart | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6921 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1201 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 592 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2361 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/run.json new file mode 100644 index 0000000..fd94b6b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:28:14.437Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/totals.csv new file mode 100644 index 0000000..57a56b7 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002811Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,4010::budget run +ad,5656::budget run +aws-eks-nodeagent,76::budget run +aws-node,364::budget run +aws-vpc-cni-init,464::budget run +cart,3627::budget run +coredns,2923::budget run +currency,109::budget run +email,319::budget run +flagd,1030::budget run +flagd-ui,182::budget run +fluentd-10x,10989::budget run +fraud-detection,272::budget run +frontend,33837::budget run +frontend-proxy,11999::budget run +grafana,138583::budget run +grafana-sc-alerts,797::budget run +grafana-sc-dashboard,1127::budget run +grafana-sc-datasources,808::budget run +image-provider,2027::budget run +init-config,670::budget run +jaeger,8189::budget run +kafka,58207::budget run +kube-proxy,11250::budget run +load-generator,922::budget run +metrics-server,2888::budget run +opensearch,25520::budget run +opentelemetry-collector,150509::budget run +payment,313::budget run +postgresql,2921::budget run +prometheus-server,3988::budget run +quote,50::budget run +recommendation,2695::budget run +valkey-cart,6921::budget run +wait-for-kafka,1201::budget run +wait-for-valkey-cart,592::budget run +*,2361::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/caps.csv new file mode 100644 index 0000000..f4acd8c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,5991::budget run +ad,5991::budget run +aws-eks-nodeagent,5991::budget run +aws-node,5991::budget run +aws-vpc-cni-init,5991::budget run +cart,5991::budget run +coredns,5991::budget run +currency,5991::budget run +email,5991::budget run +flagd,5991::budget run +flagd-ui,5991::budget run +fluentd-10x,5991::budget run +fraud-detection,5991::budget run +frontend,5991::budget run +frontend-proxy,5991::budget run +grafana,5991::budget run +grafana-sc-alerts,5991::budget run +grafana-sc-dashboard,5991::budget run +grafana-sc-datasources,5991::budget run +image-provider,5991::budget run +init-config,5991::budget run +jaeger,5991::budget run +kafka,5991::budget run +kube-proxy,5991::budget run +load-generator,5991::budget run +metrics-server,5991::budget run +opensearch,5991::budget run +opentelemetry-collector,5991::budget run +payment,5991::budget run +postgresql,5991::budget run +prometheus-server,5991::budget run +quote,5991::budget run +recommendation,5991::budget run +valkey-cart,5991::budget run +wait-for-kafka,5991::budget run +wait-for-valkey-cart,5991::budget run +*,5991::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.diff new file mode 100644 index 0000000..75e9f36 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.diff @@ -0,0 +1,271 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index f92f886..f4acd8c 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,1::budget run +-ad,1::budget run +-aws-eks-nodeagent,1::budget run +-aws-node,1::budget run +-aws-vpc-cni-init,1::budget run +-cart,1::budget run +-coredns,1::budget run +-currency,1::budget run +-email,1::budget run +-flagd,1::budget run +-flagd-ui,1::budget run +-fluentd-10x,1::budget run +-fraud-detection,1::budget run +-frontend,1::budget run +-frontend-proxy,1::budget run +-grafana,1::budget run +-grafana-sc-alerts,1::budget run +-grafana-sc-dashboard,1::budget run +-grafana-sc-datasources,1::budget run +-image-provider,1::budget run +-init-config,1::budget run +-jaeger,1::budget run +-kafka,1::budget run +-kube-proxy,1::budget run +-load-generator,1::budget run +-metrics-server,1::budget run +-opensearch,1::budget run +-opentelemetry-collector,1::budget run +-payment,1::budget run +-postgresql,1::budget run +-prometheus-server,1::budget run +-quote,1::budget run +-recommendation,1::budget run +-valkey-cart,1::budget run +-wait-for-kafka,1::budget run +-wait-for-valkey-cart,1::budget run +-*,1::budget run ++accounting,5991::budget run ++ad,5991::budget run ++aws-eks-nodeagent,5991::budget run ++aws-node,5991::budget run ++aws-vpc-cni-init,5991::budget run ++cart,5991::budget run ++coredns,5991::budget run ++currency,5991::budget run ++email,5991::budget run ++flagd,5991::budget run ++flagd-ui,5991::budget run ++fluentd-10x,5991::budget run ++fraud-detection,5991::budget run ++frontend,5991::budget run ++frontend-proxy,5991::budget run ++grafana,5991::budget run ++grafana-sc-alerts,5991::budget run ++grafana-sc-dashboard,5991::budget run ++grafana-sc-datasources,5991::budget run ++image-provider,5991::budget run ++init-config,5991::budget run ++jaeger,5991::budget run ++kafka,5991::budget run ++kube-proxy,5991::budget run ++load-generator,5991::budget run ++metrics-server,5991::budget run ++opensearch,5991::budget run ++opentelemetry-collector,5991::budget run ++payment,5991::budget run ++postgresql,5991::budget run ++prometheus-server,5991::budget run ++quote,5991::budget run ++recommendation,5991::budget run ++valkey-cart,5991::budget run ++wait-for-kafka,5991::budget run ++wait-for-valkey-cart,5991::budget run ++*,5991::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index 89e536b..e07854e 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,4236ef75e377 ++generation,e4464048f2c6 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 57a56b7..bd29180 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,4010::budget run +-ad,5656::budget run +-aws-eks-nodeagent,76::budget run +-aws-node,364::budget run +-aws-vpc-cni-init,464::budget run +-cart,3627::budget run +-coredns,2923::budget run +-currency,109::budget run +-email,319::budget run +-flagd,1030::budget run +-flagd-ui,182::budget run +-fluentd-10x,10989::budget run +-fraud-detection,272::budget run +-frontend,33837::budget run +-frontend-proxy,11999::budget run +-grafana,138583::budget run +-grafana-sc-alerts,797::budget run +-grafana-sc-dashboard,1127::budget run +-grafana-sc-datasources,808::budget run +-image-provider,2027::budget run +-init-config,670::budget run +-jaeger,8189::budget run +-kafka,58207::budget run +-kube-proxy,11250::budget run +-load-generator,922::budget run +-metrics-server,2888::budget run +-opensearch,25520::budget run +-opentelemetry-collector,150509::budget run +-payment,313::budget run +-postgresql,2921::budget run +-prometheus-server,3988::budget run +-quote,50::budget run +-recommendation,2695::budget run +-valkey-cart,6921::budget run +-wait-for-kafka,1201::budget run +-wait-for-valkey-cart,592::budget run +-*,2361::budget run ++accounting,3784::budget run ++ad,18352::budget run ++aws-eks-nodeagent,72::budget run ++aws-node,344::budget run ++aws-vpc-cni-init,437::budget run ++cart,12499::budget run ++coredns,2758::budget run ++currency,103::budget run ++email,301::budget run ++flagd,972::budget run ++flagd-ui,172::budget run ++fluentd-10x,11904::budget run ++fraud-detection,256::budget run ++frontend,33800::budget run ++frontend-proxy,11321::budget run ++grafana,136482::budget run ++grafana-sc-alerts,752::budget run ++grafana-sc-dashboard,1064::budget run ++grafana-sc-datasources,762::budget run ++image-provider,1912::budget run ++init-config,632::budget run ++jaeger,7726::budget run ++kafka,127170::budget run ++kube-proxy,16828::budget run ++load-generator,870::budget run ++metrics-server,2725::budget run ++opensearch,26157::budget run ++opentelemetry-collector,155892::budget run ++payment,296::budget run ++postgresql,2670::budget run ++prometheus-server,5347::budget run ++quote,47::budget run ++recommendation,6175::budget run ++valkey-cart,13340::budget run ++wait-for-kafka,6144::budget run ++wait-for-valkey-cart,559::budget run ++*,2697::budget run +diff --git a/reports/latest.md b/reports/latest.md +index c72568e..f56804e 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,54 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:28:11.000Z ++# Hot-tier run: 2026-10-26T00:29:10.000Z + +-Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 89 MB within 2 hours, with 1.5 GB a day of counted lines moved to the frozen tier. ++Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 2. +-- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 2 hours (default (no tier_down index has been moved yet)). +-- Each counted byte takes 1.45 bytes of store kept, 0.55 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 1.6 GB a day; 0 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 179 MB a day on hot whatever the limits; the size holds down to that floor. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 7 MB in 1. ++- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). ++- Each counted byte takes 1.33 bytes of store kept, 0.63 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 2.4 GB a day; 220 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 171 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. +-- Warning: The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) alone keeps about 179 MB a day on hot, more than the 0 MB a day that fits, so hot settles above 41 MB at about 89 MB. Raise the size, move the noisiest services to offload, or lower the sample. +-- Warning: Lines outside the Receiver and the tier_down lines waiting to move already fill 41 MB, so the Receiver's services keep nothing beyond the always-pass sample of 5 lines a statement a window. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1 | 4010 | +-| ad | the frozen tier | 1 | 51 MB | 2 MB | 1 | 5656 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1 | 76 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1 | 364 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1 | 464 | +-| cart | the frozen tier | 1 | 125 MB | 1 MB | 1 | 3627 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2923 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1 | 109 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1 | 319 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1030 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1 | 182 | +-| fluentd-10x | the frozen tier | 1 | 13 MB | 4 MB | 1 | 10989 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1 | 272 | +-| frontend | the frozen tier | 1 | 29 MB | 12 MB | 1 | 33837 | +-| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 1 | 11999 | +-| grafana | the frozen tier | 1 | 54 MB | 50 MB | 1 | 138583 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1 | 797 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1 | 1127 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1 | 808 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2027 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1 | 670 | +-| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 1 | 8189 | +-| kafka | the frozen tier | 1 | 254 MB | 21 MB | 1 | 58207 | +-| kube-proxy | the frozen tier | 1 | 6 MB | 4 MB | 1 | 11250 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1 | 922 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2888 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 1 | 25520 | +-| opentelemetry-collector | the frozen tier | 1 | 1 GB | 54 MB | 1 | 150509 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1 | 313 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1 | 2921 | +-| prometheus-server | the frozen tier | 1 | 1 MB | 1 MB | 1 | 3988 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1 | 50 | +-| recommendation | the frozen tier | 1 | 37 MB | 1 MB | 1 | 2695 | +-| valkey-cart | the frozen tier | 1 | 3 MB | 2 MB | 1 | 6921 | +-| wait-for-kafka | the frozen tier | 1 | 3 MB | 0 MB | 1 | 1201 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1 | 592 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1 | 2361 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 3784 | ++| ad | the frozen tier | 1 | 80 MB | 7 MB | 5991 | 18352 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 72 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 344 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 437 | ++| cart | the frozen tier | 1 | 200 MB | 4 MB | 5991 | 12499 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2758 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 103 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 301 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 972 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 172 | ++| fluentd-10x | the frozen tier | 1 | 16 MB | 4 MB | 5991 | 11904 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 256 | ++| frontend | the frozen tier | 1 | 46 MB | 12 MB | 5991 | 33800 | ++| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5991 | 11321 | ++| grafana | the frozen tier | 1 | 54 MB | 49 MB | 5991 | 136482 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 752 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 1064 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 762 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 1912 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 632 | ++| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5991 | 7726 | ++| kafka | the frozen tier | 1 | 383 MB | 46 MB | 5991 | 127170 | ++| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5991 | 16828 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 870 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2725 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5991 | 26157 | ++| opentelemetry-collector | the frozen tier | 1 | 1.6 GB | 56 MB | 5991 | 155892 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 296 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2670 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5991 | 5347 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 47 | ++| recommendation | the frozen tier | 1 | 55 MB | 2 MB | 5991 | 6175 | ++| valkey-cart | the frozen tier | 1 | 5 MB | 5 MB | 5991 | 13340 | ++| wait-for-kafka | the frozen tier | 1 | 3 MB | 2 MB | 5991 | 6144 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 559 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5991 | 2697 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.json new file mode 100644 index 0000000..e2ce125 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/commit.json @@ -0,0 +1 @@ +{"before":"b38595b6f85a4836e82df549be73476fb17d161f","after":"8750a9199bc0d9c79f8dbab55ee4b043473189ec","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/config-generation.csv new file mode 100644 index 0000000..e07854e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,e4464048f2c6 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/latest.md new file mode 100644 index 0000000..f56804e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:29:10.000Z + +Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 7 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.33 bytes of store kept, 0.63 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.4 GB a day; 220 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 171 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 3784 | +| ad | the frozen tier | 1 | 80 MB | 7 MB | 5991 | 18352 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 72 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 344 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 437 | +| cart | the frozen tier | 1 | 200 MB | 4 MB | 5991 | 12499 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2758 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 103 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 301 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 972 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 172 | +| fluentd-10x | the frozen tier | 1 | 16 MB | 4 MB | 5991 | 11904 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 256 | +| frontend | the frozen tier | 1 | 46 MB | 12 MB | 5991 | 33800 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5991 | 11321 | +| grafana | the frozen tier | 1 | 54 MB | 49 MB | 5991 | 136482 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 752 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 1064 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 762 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 1912 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 632 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5991 | 7726 | +| kafka | the frozen tier | 1 | 383 MB | 46 MB | 5991 | 127170 | +| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5991 | 16828 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 870 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2725 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5991 | 26157 | +| opentelemetry-collector | the frozen tier | 1 | 1.6 GB | 56 MB | 5991 | 155892 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 296 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2670 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5991 | 5347 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 47 | +| recommendation | the frozen tier | 1 | 55 MB | 2 MB | 5991 | 6175 | +| valkey-cart | the frozen tier | 1 | 5 MB | 5 MB | 5991 | 13340 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 2 MB | 5991 | 6144 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 559 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5991 | 2697 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/report.txt new file mode 100644 index 0000000..ee71e0b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 7 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.33 bytes of store kept, 0.63 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 2.4 GB a day; 220 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 171 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:29:10.000Z + +Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 7 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.33 bytes of store kept, 0.63 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.4 GB a day; 220 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 171 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 3784 | +| ad | the frozen tier | 1 | 80 MB | 7 MB | 5991 | 18352 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 72 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 344 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 437 | +| cart | the frozen tier | 1 | 200 MB | 4 MB | 5991 | 12499 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2758 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 103 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 301 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 972 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 172 | +| fluentd-10x | the frozen tier | 1 | 16 MB | 4 MB | 5991 | 11904 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 256 | +| frontend | the frozen tier | 1 | 46 MB | 12 MB | 5991 | 33800 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5991 | 11321 | +| grafana | the frozen tier | 1 | 54 MB | 49 MB | 5991 | 136482 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 752 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 1064 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 762 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 1912 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 632 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5991 | 7726 | +| kafka | the frozen tier | 1 | 383 MB | 46 MB | 5991 | 127170 | +| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5991 | 16828 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 870 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2725 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5991 | 26157 | +| opentelemetry-collector | the frozen tier | 1 | 1.6 GB | 56 MB | 5991 | 155892 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 296 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2670 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5991 | 5347 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 47 | +| recommendation | the frozen tier | 1 | 55 MB | 2 MB | 5991 | 6175 | +| valkey-cart | the frozen tier | 1 | 5 MB | 5 MB | 5991 | 13340 | +| wait-for-kafka | the frozen tier | 1 | 3 MB | 2 MB | 5991 | 6144 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 559 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5991 | 2697 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/run.json new file mode 100644 index 0000000..8ee0f7b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:29:13.092Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/totals.csv new file mode 100644 index 0000000..bd29180 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T002909Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,3784::budget run +ad,18352::budget run +aws-eks-nodeagent,72::budget run +aws-node,344::budget run +aws-vpc-cni-init,437::budget run +cart,12499::budget run +coredns,2758::budget run +currency,103::budget run +email,301::budget run +flagd,972::budget run +flagd-ui,172::budget run +fluentd-10x,11904::budget run +fraud-detection,256::budget run +frontend,33800::budget run +frontend-proxy,11321::budget run +grafana,136482::budget run +grafana-sc-alerts,752::budget run +grafana-sc-dashboard,1064::budget run +grafana-sc-datasources,762::budget run +image-provider,1912::budget run +init-config,632::budget run +jaeger,7726::budget run +kafka,127170::budget run +kube-proxy,16828::budget run +load-generator,870::budget run +metrics-server,2725::budget run +opensearch,26157::budget run +opentelemetry-collector,155892::budget run +payment,296::budget run +postgresql,2670::budget run +prometheus-server,5347::budget run +quote,47::budget run +recommendation,6175::budget run +valkey-cart,13340::budget run +wait-for-kafka,6144::budget run +wait-for-valkey-cart,559::budget run +*,2697::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/caps.csv new file mode 100644 index 0000000..2fd505d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,5154::budget run +ad,5154::budget run +aws-eks-nodeagent,5154::budget run +aws-node,5154::budget run +aws-vpc-cni-init,5154::budget run +cart,5154::budget run +coredns,5154::budget run +currency,5154::budget run +email,5154::budget run +flagd,5154::budget run +flagd-ui,5154::budget run +fluentd-10x,5154::budget run +fraud-detection,5154::budget run +frontend,5154::budget run +frontend-proxy,5154::budget run +grafana,5154::budget run +grafana-sc-alerts,5154::budget run +grafana-sc-dashboard,5154::budget run +grafana-sc-datasources,5154::budget run +image-provider,5154::budget run +init-config,5154::budget run +jaeger,5154::budget run +kafka,5154::budget run +kube-proxy,5154::budget run +load-generator,5154::budget run +metrics-server,5154::budget run +opensearch,5154::budget run +opentelemetry-collector,5154::budget run +payment,5154::budget run +postgresql,5154::budget run +prometheus-server,5154::budget run +quote,5154::budget run +recommendation,5154::budget run +valkey-cart,5154::budget run +wait-for-kafka,5154::budget run +wait-for-valkey-cart,5154::budget run +*,5154::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.diff new file mode 100644 index 0000000..a51c196 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.diff @@ -0,0 +1,268 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index f4acd8c..2fd505d 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,5991::budget run +-ad,5991::budget run +-aws-eks-nodeagent,5991::budget run +-aws-node,5991::budget run +-aws-vpc-cni-init,5991::budget run +-cart,5991::budget run +-coredns,5991::budget run +-currency,5991::budget run +-email,5991::budget run +-flagd,5991::budget run +-flagd-ui,5991::budget run +-fluentd-10x,5991::budget run +-fraud-detection,5991::budget run +-frontend,5991::budget run +-frontend-proxy,5991::budget run +-grafana,5991::budget run +-grafana-sc-alerts,5991::budget run +-grafana-sc-dashboard,5991::budget run +-grafana-sc-datasources,5991::budget run +-image-provider,5991::budget run +-init-config,5991::budget run +-jaeger,5991::budget run +-kafka,5991::budget run +-kube-proxy,5991::budget run +-load-generator,5991::budget run +-metrics-server,5991::budget run +-opensearch,5991::budget run +-opentelemetry-collector,5991::budget run +-payment,5991::budget run +-postgresql,5991::budget run +-prometheus-server,5991::budget run +-quote,5991::budget run +-recommendation,5991::budget run +-valkey-cart,5991::budget run +-wait-for-kafka,5991::budget run +-wait-for-valkey-cart,5991::budget run +-*,5991::budget run ++accounting,5154::budget run ++ad,5154::budget run ++aws-eks-nodeagent,5154::budget run ++aws-node,5154::budget run ++aws-vpc-cni-init,5154::budget run ++cart,5154::budget run ++coredns,5154::budget run ++currency,5154::budget run ++email,5154::budget run ++flagd,5154::budget run ++flagd-ui,5154::budget run ++fluentd-10x,5154::budget run ++fraud-detection,5154::budget run ++frontend,5154::budget run ++frontend-proxy,5154::budget run ++grafana,5154::budget run ++grafana-sc-alerts,5154::budget run ++grafana-sc-dashboard,5154::budget run ++grafana-sc-datasources,5154::budget run ++image-provider,5154::budget run ++init-config,5154::budget run ++jaeger,5154::budget run ++kafka,5154::budget run ++kube-proxy,5154::budget run ++load-generator,5154::budget run ++metrics-server,5154::budget run ++opensearch,5154::budget run ++opentelemetry-collector,5154::budget run ++payment,5154::budget run ++postgresql,5154::budget run ++prometheus-server,5154::budget run ++quote,5154::budget run ++recommendation,5154::budget run ++valkey-cart,5154::budget run ++wait-for-kafka,5154::budget run ++wait-for-valkey-cart,5154::budget run ++*,5154::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index e07854e..60fc9b6 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,e4464048f2c6 ++generation,7d2a21a237e4 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index bd29180..a767c2d 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,3784::budget run +-ad,18352::budget run +-aws-eks-nodeagent,72::budget run +-aws-node,344::budget run +-aws-vpc-cni-init,437::budget run +-cart,12499::budget run +-coredns,2758::budget run +-currency,103::budget run +-email,301::budget run +-flagd,972::budget run +-flagd-ui,172::budget run +-fluentd-10x,11904::budget run +-fraud-detection,256::budget run +-frontend,33800::budget run +-frontend-proxy,11321::budget run +-grafana,136482::budget run +-grafana-sc-alerts,752::budget run +-grafana-sc-dashboard,1064::budget run +-grafana-sc-datasources,762::budget run +-image-provider,1912::budget run +-init-config,632::budget run +-jaeger,7726::budget run +-kafka,127170::budget run +-kube-proxy,16828::budget run +-load-generator,870::budget run +-metrics-server,2725::budget run +-opensearch,26157::budget run +-opentelemetry-collector,155892::budget run +-payment,296::budget run +-postgresql,2670::budget run +-prometheus-server,5347::budget run +-quote,47::budget run +-recommendation,6175::budget run +-valkey-cart,13340::budget run +-wait-for-kafka,6144::budget run +-wait-for-valkey-cart,559::budget run +-*,2697::budget run ++accounting,3585::budget run ++ad,15821::budget run ++aws-eks-nodeagent,68::budget run ++aws-node,325::budget run ++aws-vpc-cni-init,414::budget run ++cart,10798::budget run ++coredns,2613::budget run ++currency,97::budget run ++email,285::budget run ++flagd,921::budget run ++flagd-ui,162::budget run ++fluentd-10x,10944::budget run ++fraud-detection,243::budget run ++frontend,33767::budget run ++frontend-proxy,10726::budget run ++grafana,130285::budget run ++grafana-sc-alerts,712::budget run ++grafana-sc-dashboard,1008::budget run ++grafana-sc-datasources,722::budget run ++image-provider,1812::budget run ++init-config,598::budget run ++jaeger,7320::budget run ++kafka,113697::budget run ++kube-proxy,16151::budget run ++load-generator,825::budget run ++metrics-server,2582::budget run ++opensearch,25572::budget run ++opentelemetry-collector,146596::budget run ++payment,280::budget run ++postgresql,2529::budget run ++prometheus-server,5994::budget run ++quote,45::budget run ++recommendation,5328::budget run ++valkey-cart,15775::budget run ++wait-for-kafka,5299::budget run ++wait-for-valkey-cart,529::budget run ++*,2555::budget run +diff --git a/reports/latest.md b/reports/latest.md +index f56804e..1625f7d 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:29:10.000Z ++# Hot-tier run: 2026-10-26T00:30:08.000Z + +-Hot tier: 11 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.2 GB a day of counted lines moved to the frozen tier. ++Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 7 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 8 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +-- Each counted byte takes 1.33 bytes of store kept, 0.63 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 2.4 GB a day; 220 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 171 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.39 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 2.7 GB a day; 207 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 165 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 3784 | +-| ad | the frozen tier | 1 | 80 MB | 7 MB | 5991 | 18352 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 72 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 344 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 437 | +-| cart | the frozen tier | 1 | 200 MB | 4 MB | 5991 | 12499 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2758 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 103 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 301 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 972 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 172 | +-| fluentd-10x | the frozen tier | 1 | 16 MB | 4 MB | 5991 | 11904 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 256 | +-| frontend | the frozen tier | 1 | 46 MB | 12 MB | 5991 | 33800 | +-| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5991 | 11321 | +-| grafana | the frozen tier | 1 | 54 MB | 49 MB | 5991 | 136482 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 752 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 1064 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 762 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 1912 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 632 | +-| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5991 | 7726 | +-| kafka | the frozen tier | 1 | 383 MB | 46 MB | 5991 | 127170 | +-| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5991 | 16828 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 870 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2725 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5991 | 26157 | +-| opentelemetry-collector | the frozen tier | 1 | 1.6 GB | 56 MB | 5991 | 155892 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 296 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5991 | 2670 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5991 | 5347 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 47 | +-| recommendation | the frozen tier | 1 | 55 MB | 2 MB | 5991 | 6175 | +-| valkey-cart | the frozen tier | 1 | 5 MB | 5 MB | 5991 | 13340 | +-| wait-for-kafka | the frozen tier | 1 | 3 MB | 2 MB | 5991 | 6144 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5991 | 559 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5991 | 2697 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 3585 | ++| ad | the frozen tier | 1 | 91 MB | 6 MB | 5154 | 15821 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 68 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 325 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 414 | ++| cart | the frozen tier | 1 | 225 MB | 4 MB | 5154 | 10798 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2613 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 97 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 285 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 921 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 162 | ++| fluentd-10x | the frozen tier | 1 | 18 MB | 4 MB | 5154 | 10944 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 243 | ++| frontend | the frozen tier | 1 | 53 MB | 12 MB | 5154 | 33767 | ++| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5154 | 10726 | ++| grafana | the frozen tier | 1 | 53 MB | 47 MB | 5154 | 130285 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 712 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 1008 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 722 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 1812 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 598 | ++| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5154 | 7320 | ++| kafka | the frozen tier | 1 | 423 MB | 41 MB | 5154 | 113697 | ++| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 16151 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 825 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2582 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5154 | 25572 | ++| opentelemetry-collector | the frozen tier | 1 | 1.7 GB | 53 MB | 5154 | 146596 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 280 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2529 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5994 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 45 | ++| recommendation | the frozen tier | 1 | 59 MB | 2 MB | 5154 | 5328 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 15775 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5299 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 529 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5154 | 2555 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.json new file mode 100644 index 0000000..6a401c0 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/commit.json @@ -0,0 +1 @@ +{"before":"8750a9199bc0d9c79f8dbab55ee4b043473189ec","after":"0cf7d84d09c22a6a34f532f78e9bfaeb4fb311c5","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/config-generation.csv new file mode 100644 index 0000000..60fc9b6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,7d2a21a237e4 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/latest.md new file mode 100644 index 0000000..1625f7d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:30:08.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 8 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.39 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.7 GB a day; 207 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 165 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 3585 | +| ad | the frozen tier | 1 | 91 MB | 6 MB | 5154 | 15821 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 68 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 325 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 414 | +| cart | the frozen tier | 1 | 225 MB | 4 MB | 5154 | 10798 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2613 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 97 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 285 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 921 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 162 | +| fluentd-10x | the frozen tier | 1 | 18 MB | 4 MB | 5154 | 10944 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 243 | +| frontend | the frozen tier | 1 | 53 MB | 12 MB | 5154 | 33767 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5154 | 10726 | +| grafana | the frozen tier | 1 | 53 MB | 47 MB | 5154 | 130285 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 712 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 1008 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 722 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 1812 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 598 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5154 | 7320 | +| kafka | the frozen tier | 1 | 423 MB | 41 MB | 5154 | 113697 | +| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 16151 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 825 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2582 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5154 | 25572 | +| opentelemetry-collector | the frozen tier | 1 | 1.7 GB | 53 MB | 5154 | 146596 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 280 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2529 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5994 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 45 | +| recommendation | the frozen tier | 1 | 59 MB | 2 MB | 5154 | 5328 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 15775 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5299 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 529 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5154 | 2555 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/report.txt new file mode 100644 index 0000000..732195e --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 8 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.39 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 2.7 GB a day; 207 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 165 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:30:08.000Z + +Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 8 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.39 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.7 GB a day; 207 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 165 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 3585 | +| ad | the frozen tier | 1 | 91 MB | 6 MB | 5154 | 15821 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 68 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 325 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 414 | +| cart | the frozen tier | 1 | 225 MB | 4 MB | 5154 | 10798 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2613 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 97 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 285 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 921 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 162 | +| fluentd-10x | the frozen tier | 1 | 18 MB | 4 MB | 5154 | 10944 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 243 | +| frontend | the frozen tier | 1 | 53 MB | 12 MB | 5154 | 33767 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5154 | 10726 | +| grafana | the frozen tier | 1 | 53 MB | 47 MB | 5154 | 130285 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 712 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 1008 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 722 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 1812 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 598 | +| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5154 | 7320 | +| kafka | the frozen tier | 1 | 423 MB | 41 MB | 5154 | 113697 | +| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 16151 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 825 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2582 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5154 | 25572 | +| opentelemetry-collector | the frozen tier | 1 | 1.7 GB | 53 MB | 5154 | 146596 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 280 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2529 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5994 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 45 | +| recommendation | the frozen tier | 1 | 59 MB | 2 MB | 5154 | 5328 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 15775 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5299 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 529 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5154 | 2555 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/run.json new file mode 100644 index 0000000..2fc4300 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:30:11.741Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/totals.csv new file mode 100644 index 0000000..a767c2d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003008Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,3585::budget run +ad,15821::budget run +aws-eks-nodeagent,68::budget run +aws-node,325::budget run +aws-vpc-cni-init,414::budget run +cart,10798::budget run +coredns,2613::budget run +currency,97::budget run +email,285::budget run +flagd,921::budget run +flagd-ui,162::budget run +fluentd-10x,10944::budget run +fraud-detection,243::budget run +frontend,33767::budget run +frontend-proxy,10726::budget run +grafana,130285::budget run +grafana-sc-alerts,712::budget run +grafana-sc-dashboard,1008::budget run +grafana-sc-datasources,722::budget run +image-provider,1812::budget run +init-config,598::budget run +jaeger,7320::budget run +kafka,113697::budget run +kube-proxy,16151::budget run +load-generator,825::budget run +metrics-server,2582::budget run +opensearch,25572::budget run +opentelemetry-collector,146596::budget run +payment,280::budget run +postgresql,2529::budget run +prometheus-server,5994::budget run +quote,45::budget run +recommendation,5328::budget run +valkey-cart,15775::budget run +wait-for-kafka,5299::budget run +wait-for-valkey-cart,529::budget run +*,2555::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/caps.csv new file mode 100644 index 0000000..eb318b1 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,3081::budget run +ad,3081::budget run +aws-eks-nodeagent,3081::budget run +aws-node,3081::budget run +aws-vpc-cni-init,3081::budget run +cart,3081::budget run +coredns,3081::budget run +currency,3081::budget run +email,3081::budget run +flagd,3081::budget run +flagd-ui,3081::budget run +fluentd-10x,3081::budget run +fraud-detection,3081::budget run +frontend,3081::budget run +frontend-proxy,3081::budget run +grafana,3081::budget run +grafana-sc-alerts,3081::budget run +grafana-sc-dashboard,3081::budget run +grafana-sc-datasources,3081::budget run +image-provider,3081::budget run +init-config,3081::budget run +jaeger,3081::budget run +kafka,3081::budget run +kube-proxy,3081::budget run +load-generator,3081::budget run +metrics-server,3081::budget run +opensearch,3081::budget run +opentelemetry-collector,3081::budget run +payment,3081::budget run +postgresql,3081::budget run +prometheus-server,3081::budget run +quote,3081::budget run +recommendation,3081::budget run +valkey-cart,3081::budget run +wait-for-kafka,3081::budget run +wait-for-valkey-cart,3081::budget run +*,3081::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.diff new file mode 100644 index 0000000..7dccf00 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.diff @@ -0,0 +1,268 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index 2fd505d..eb318b1 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,5154::budget run +-ad,5154::budget run +-aws-eks-nodeagent,5154::budget run +-aws-node,5154::budget run +-aws-vpc-cni-init,5154::budget run +-cart,5154::budget run +-coredns,5154::budget run +-currency,5154::budget run +-email,5154::budget run +-flagd,5154::budget run +-flagd-ui,5154::budget run +-fluentd-10x,5154::budget run +-fraud-detection,5154::budget run +-frontend,5154::budget run +-frontend-proxy,5154::budget run +-grafana,5154::budget run +-grafana-sc-alerts,5154::budget run +-grafana-sc-dashboard,5154::budget run +-grafana-sc-datasources,5154::budget run +-image-provider,5154::budget run +-init-config,5154::budget run +-jaeger,5154::budget run +-kafka,5154::budget run +-kube-proxy,5154::budget run +-load-generator,5154::budget run +-metrics-server,5154::budget run +-opensearch,5154::budget run +-opentelemetry-collector,5154::budget run +-payment,5154::budget run +-postgresql,5154::budget run +-prometheus-server,5154::budget run +-quote,5154::budget run +-recommendation,5154::budget run +-valkey-cart,5154::budget run +-wait-for-kafka,5154::budget run +-wait-for-valkey-cart,5154::budget run +-*,5154::budget run ++accounting,3081::budget run ++ad,3081::budget run ++aws-eks-nodeagent,3081::budget run ++aws-node,3081::budget run ++aws-vpc-cni-init,3081::budget run ++cart,3081::budget run ++coredns,3081::budget run ++currency,3081::budget run ++email,3081::budget run ++flagd,3081::budget run ++flagd-ui,3081::budget run ++fluentd-10x,3081::budget run ++fraud-detection,3081::budget run ++frontend,3081::budget run ++frontend-proxy,3081::budget run ++grafana,3081::budget run ++grafana-sc-alerts,3081::budget run ++grafana-sc-dashboard,3081::budget run ++grafana-sc-datasources,3081::budget run ++image-provider,3081::budget run ++init-config,3081::budget run ++jaeger,3081::budget run ++kafka,3081::budget run ++kube-proxy,3081::budget run ++load-generator,3081::budget run ++metrics-server,3081::budget run ++opensearch,3081::budget run ++opentelemetry-collector,3081::budget run ++payment,3081::budget run ++postgresql,3081::budget run ++prometheus-server,3081::budget run ++quote,3081::budget run ++recommendation,3081::budget run ++valkey-cart,3081::budget run ++wait-for-kafka,3081::budget run ++wait-for-valkey-cart,3081::budget run ++*,3081::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index 60fc9b6..417d31c 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,7d2a21a237e4 ++generation,53f9121356c1 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index a767c2d..969299a 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,3585::budget run +-ad,15821::budget run +-aws-eks-nodeagent,68::budget run +-aws-node,325::budget run +-aws-vpc-cni-init,414::budget run +-cart,10798::budget run +-coredns,2613::budget run +-currency,97::budget run +-email,285::budget run +-flagd,921::budget run +-flagd-ui,162::budget run +-fluentd-10x,10944::budget run +-fraud-detection,243::budget run +-frontend,33767::budget run +-frontend-proxy,10726::budget run +-grafana,130285::budget run +-grafana-sc-alerts,712::budget run +-grafana-sc-dashboard,1008::budget run +-grafana-sc-datasources,722::budget run +-image-provider,1812::budget run +-init-config,598::budget run +-jaeger,7320::budget run +-kafka,113697::budget run +-kube-proxy,16151::budget run +-load-generator,825::budget run +-metrics-server,2582::budget run +-opensearch,25572::budget run +-opentelemetry-collector,146596::budget run +-payment,280::budget run +-postgresql,2529::budget run +-prometheus-server,5994::budget run +-quote,45::budget run +-recommendation,5328::budget run +-valkey-cart,15775::budget run +-wait-for-kafka,5299::budget run +-wait-for-valkey-cart,529::budget run +-*,2555::budget run ++accounting,3388::budget run ++ad,9581::budget run ++aws-eks-nodeagent,64::budget run ++aws-node,308::budget run ++aws-vpc-cni-init,392::budget run ++cart,6624::budget run ++coredns,2469::budget run ++currency,92::budget run ++email,269::budget run ++flagd,870::budget run ++flagd-ui,154::budget run ++fluentd-10x,8553::budget run ++fraud-detection,230::budget run ++frontend,33734::budget run ++frontend-proxy,10138::budget run ++grafana,122725::budget run ++grafana-sc-alerts,673::budget run ++grafana-sc-dashboard,952::budget run ++grafana-sc-datasources,683::budget run ++image-provider,1712::budget run ++init-config,566::budget run ++jaeger,6919::budget run ++kafka,78110::budget run ++kube-proxy,14525::budget run ++load-generator,779::budget run ++metrics-server,2440::budget run ++opensearch,25525::budget run ++opentelemetry-collector,133965::budget run ++payment,265::budget run ++postgresql,2390::budget run ++prometheus-server,5813::budget run ++quote,42::budget run ++recommendation,3245::budget run ++valkey-cart,15762::budget run ++wait-for-kafka,3217::budget run ++wait-for-valkey-cart,500::budget run ++*,2415::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 1625f7d..e35ef5c 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:30:08.000Z ++# Hot-tier run: 2026-10-26T00:31:12.000Z + +-Hot tier: 12 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.5 GB a day of counted lines moved to the frozen tier. ++Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 3 MB in 2 indices; its tier_down lines not yet moved: 8 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +-- Each counted byte takes 1.39 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 2.7 GB a day; 207 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 165 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.59 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 2.9 GB a day; 179 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 160 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 3585 | +-| ad | the frozen tier | 1 | 91 MB | 6 MB | 5154 | 15821 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 68 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 325 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 414 | +-| cart | the frozen tier | 1 | 225 MB | 4 MB | 5154 | 10798 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2613 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 97 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 285 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 921 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 162 | +-| fluentd-10x | the frozen tier | 1 | 18 MB | 4 MB | 5154 | 10944 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 243 | +-| frontend | the frozen tier | 1 | 53 MB | 12 MB | 5154 | 33767 | +-| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 5154 | 10726 | +-| grafana | the frozen tier | 1 | 53 MB | 47 MB | 5154 | 130285 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 712 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 1008 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 722 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 1812 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 598 | +-| jaeger | the frozen tier | 1 | 3 MB | 3 MB | 5154 | 7320 | +-| kafka | the frozen tier | 1 | 423 MB | 41 MB | 5154 | 113697 | +-| kube-proxy | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 16151 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 825 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2582 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 5154 | 25572 | +-| opentelemetry-collector | the frozen tier | 1 | 1.7 GB | 53 MB | 5154 | 146596 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 280 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 5154 | 2529 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5994 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 45 | +-| recommendation | the frozen tier | 1 | 59 MB | 2 MB | 5154 | 5328 | +-| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 5154 | 15775 | +-| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 5154 | 5299 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 5154 | 529 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 5154 | 2555 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 3388 | ++| ad | the frozen tier | 1 | 100 MB | 3 MB | 3081 | 9581 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 64 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 308 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 392 | ++| cart | the frozen tier | 1 | 238 MB | 2 MB | 3081 | 6624 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2469 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 92 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 269 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 870 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 154 | ++| fluentd-10x | the frozen tier | 1 | 19 MB | 3 MB | 3081 | 8553 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 230 | ++| frontend | the frozen tier | 1 | 57 MB | 12 MB | 3081 | 33734 | ++| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 3081 | 10138 | ++| grafana | the frozen tier | 1 | 52 MB | 44 MB | 3081 | 122725 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 673 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 952 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 683 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 1712 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 566 | ++| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 6919 | ++| kafka | the frozen tier | 1 | 455 MB | 28 MB | 3081 | 78110 | ++| kube-proxy | the frozen tier | 1 | 6 MB | 5 MB | 3081 | 14525 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 779 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2440 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 3081 | 25525 | ++| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 48 MB | 3081 | 133965 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 265 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2390 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 5813 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 42 | ++| recommendation | the frozen tier | 1 | 62 MB | 1 MB | 3081 | 3245 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 3081 | 15762 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 1 MB | 3081 | 3217 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 500 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 3081 | 2415 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.json new file mode 100644 index 0000000..b50ce34 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/commit.json @@ -0,0 +1 @@ +{"before":"0cf7d84d09c22a6a34f532f78e9bfaeb4fb311c5","after":"74d3d473d13dfd1093ff84a85d1dcd948e2bbdaf","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/config-generation.csv new file mode 100644 index 0000000..417d31c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,53f9121356c1 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/latest.md new file mode 100644 index 0000000..e35ef5c --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:31:12.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.59 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.9 GB a day; 179 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 160 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 3388 | +| ad | the frozen tier | 1 | 100 MB | 3 MB | 3081 | 9581 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 64 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 308 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 392 | +| cart | the frozen tier | 1 | 238 MB | 2 MB | 3081 | 6624 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2469 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 92 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 269 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 870 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 154 | +| fluentd-10x | the frozen tier | 1 | 19 MB | 3 MB | 3081 | 8553 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 230 | +| frontend | the frozen tier | 1 | 57 MB | 12 MB | 3081 | 33734 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 3081 | 10138 | +| grafana | the frozen tier | 1 | 52 MB | 44 MB | 3081 | 122725 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 673 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 952 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 683 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 1712 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 566 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 6919 | +| kafka | the frozen tier | 1 | 455 MB | 28 MB | 3081 | 78110 | +| kube-proxy | the frozen tier | 1 | 6 MB | 5 MB | 3081 | 14525 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 779 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2440 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 3081 | 25525 | +| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 48 MB | 3081 | 133965 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 265 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2390 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 5813 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 42 | +| recommendation | the frozen tier | 1 | 62 MB | 1 MB | 3081 | 3245 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 3081 | 15762 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 1 MB | 3081 | 3217 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 500 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 3081 | 2415 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/report.txt new file mode 100644 index 0000000..3ec5d50 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.59 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 2.9 GB a day; 179 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 160 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:31:12.000Z + +Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.59 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.9 GB a day; 179 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 160 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 3388 | +| ad | the frozen tier | 1 | 100 MB | 3 MB | 3081 | 9581 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 64 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 308 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 392 | +| cart | the frozen tier | 1 | 238 MB | 2 MB | 3081 | 6624 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2469 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 92 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 269 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 870 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 154 | +| fluentd-10x | the frozen tier | 1 | 19 MB | 3 MB | 3081 | 8553 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 230 | +| frontend | the frozen tier | 1 | 57 MB | 12 MB | 3081 | 33734 | +| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 3081 | 10138 | +| grafana | the frozen tier | 1 | 52 MB | 44 MB | 3081 | 122725 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 673 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 952 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 683 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 1712 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 566 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 6919 | +| kafka | the frozen tier | 1 | 455 MB | 28 MB | 3081 | 78110 | +| kube-proxy | the frozen tier | 1 | 6 MB | 5 MB | 3081 | 14525 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 779 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2440 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 3081 | 25525 | +| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 48 MB | 3081 | 133965 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 265 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2390 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 5813 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 42 | +| recommendation | the frozen tier | 1 | 62 MB | 1 MB | 3081 | 3245 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 3081 | 15762 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 1 MB | 3081 | 3217 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 500 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 3081 | 2415 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/run.json new file mode 100644 index 0000000..a4fc627 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:31:15.358Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/totals.csv new file mode 100644 index 0000000..969299a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003112Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,3388::budget run +ad,9581::budget run +aws-eks-nodeagent,64::budget run +aws-node,308::budget run +aws-vpc-cni-init,392::budget run +cart,6624::budget run +coredns,2469::budget run +currency,92::budget run +email,269::budget run +flagd,870::budget run +flagd-ui,154::budget run +fluentd-10x,8553::budget run +fraud-detection,230::budget run +frontend,33734::budget run +frontend-proxy,10138::budget run +grafana,122725::budget run +grafana-sc-alerts,673::budget run +grafana-sc-dashboard,952::budget run +grafana-sc-datasources,683::budget run +image-provider,1712::budget run +init-config,566::budget run +jaeger,6919::budget run +kafka,78110::budget run +kube-proxy,14525::budget run +load-generator,779::budget run +metrics-server,2440::budget run +opensearch,25525::budget run +opentelemetry-collector,133965::budget run +payment,265::budget run +postgresql,2390::budget run +prometheus-server,5813::budget run +quote,42::budget run +recommendation,3245::budget run +valkey-cart,15762::budget run +wait-for-kafka,3217::budget run +wait-for-valkey-cart,500::budget run +*,2415::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/caps.csv new file mode 100644 index 0000000..ede54d2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,4051::budget run +ad,4051::budget run +aws-eks-nodeagent,4051::budget run +aws-node,4051::budget run +aws-vpc-cni-init,4051::budget run +cart,4051::budget run +coredns,4051::budget run +currency,4051::budget run +email,4051::budget run +flagd,4051::budget run +flagd-ui,4051::budget run +fluentd-10x,4051::budget run +fraud-detection,4051::budget run +frontend,4051::budget run +frontend-proxy,4051::budget run +grafana,4051::budget run +grafana-sc-alerts,4051::budget run +grafana-sc-dashboard,4051::budget run +grafana-sc-datasources,4051::budget run +image-provider,4051::budget run +init-config,4051::budget run +jaeger,4051::budget run +kafka,4051::budget run +kube-proxy,4051::budget run +load-generator,4051::budget run +metrics-server,4051::budget run +opensearch,4051::budget run +opentelemetry-collector,4051::budget run +payment,4051::budget run +postgresql,4051::budget run +prometheus-server,4051::budget run +quote,4051::budget run +recommendation,4051::budget run +valkey-cart,4051::budget run +wait-for-kafka,4051::budget run +wait-for-valkey-cart,4051::budget run +*,4051::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.diff new file mode 100644 index 0000000..2f63702 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.diff @@ -0,0 +1,268 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index eb318b1..ede54d2 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,3081::budget run +-ad,3081::budget run +-aws-eks-nodeagent,3081::budget run +-aws-node,3081::budget run +-aws-vpc-cni-init,3081::budget run +-cart,3081::budget run +-coredns,3081::budget run +-currency,3081::budget run +-email,3081::budget run +-flagd,3081::budget run +-flagd-ui,3081::budget run +-fluentd-10x,3081::budget run +-fraud-detection,3081::budget run +-frontend,3081::budget run +-frontend-proxy,3081::budget run +-grafana,3081::budget run +-grafana-sc-alerts,3081::budget run +-grafana-sc-dashboard,3081::budget run +-grafana-sc-datasources,3081::budget run +-image-provider,3081::budget run +-init-config,3081::budget run +-jaeger,3081::budget run +-kafka,3081::budget run +-kube-proxy,3081::budget run +-load-generator,3081::budget run +-metrics-server,3081::budget run +-opensearch,3081::budget run +-opentelemetry-collector,3081::budget run +-payment,3081::budget run +-postgresql,3081::budget run +-prometheus-server,3081::budget run +-quote,3081::budget run +-recommendation,3081::budget run +-valkey-cart,3081::budget run +-wait-for-kafka,3081::budget run +-wait-for-valkey-cart,3081::budget run +-*,3081::budget run ++accounting,4051::budget run ++ad,4051::budget run ++aws-eks-nodeagent,4051::budget run ++aws-node,4051::budget run ++aws-vpc-cni-init,4051::budget run ++cart,4051::budget run ++coredns,4051::budget run ++currency,4051::budget run ++email,4051::budget run ++flagd,4051::budget run ++flagd-ui,4051::budget run ++fluentd-10x,4051::budget run ++fraud-detection,4051::budget run ++frontend,4051::budget run ++frontend-proxy,4051::budget run ++grafana,4051::budget run ++grafana-sc-alerts,4051::budget run ++grafana-sc-dashboard,4051::budget run ++grafana-sc-datasources,4051::budget run ++image-provider,4051::budget run ++init-config,4051::budget run ++jaeger,4051::budget run ++kafka,4051::budget run ++kube-proxy,4051::budget run ++load-generator,4051::budget run ++metrics-server,4051::budget run ++opensearch,4051::budget run ++opentelemetry-collector,4051::budget run ++payment,4051::budget run ++postgresql,4051::budget run ++prometheus-server,4051::budget run ++quote,4051::budget run ++recommendation,4051::budget run ++valkey-cart,4051::budget run ++wait-for-kafka,4051::budget run ++wait-for-valkey-cart,4051::budget run ++*,4051::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index 417d31c..ce5c893 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,53f9121356c1 ++generation,946754def770 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 969299a..e1c921f 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,3388::budget run +-ad,9581::budget run +-aws-eks-nodeagent,64::budget run +-aws-node,308::budget run +-aws-vpc-cni-init,392::budget run +-cart,6624::budget run +-coredns,2469::budget run +-currency,92::budget run +-email,269::budget run +-flagd,870::budget run +-flagd-ui,154::budget run +-fluentd-10x,8553::budget run +-fraud-detection,230::budget run +-frontend,33734::budget run +-frontend-proxy,10138::budget run +-grafana,122725::budget run +-grafana-sc-alerts,673::budget run +-grafana-sc-dashboard,952::budget run +-grafana-sc-datasources,683::budget run +-image-provider,1712::budget run +-init-config,566::budget run +-jaeger,6919::budget run +-kafka,78110::budget run +-kube-proxy,14525::budget run +-load-generator,779::budget run +-metrics-server,2440::budget run +-opensearch,25525::budget run +-opentelemetry-collector,133965::budget run +-payment,265::budget run +-postgresql,2390::budget run +-prometheus-server,5813::budget run +-quote,42::budget run +-recommendation,3245::budget run +-valkey-cart,15762::budget run +-wait-for-kafka,3217::budget run +-wait-for-valkey-cart,500::budget run +-*,2415::budget run ++accounting,3225::budget run ++ad,12477::budget run ++aws-eks-nodeagent,61::budget run ++aws-node,293::budget run ++aws-vpc-cni-init,373::budget run ++cart,8544::budget run ++coredns,2351::budget run ++currency,88::budget run ++email,256::budget run ++flagd,828::budget run ++flagd-ui,146::budget run ++fluentd-10x,9261::budget run ++fraud-detection,219::budget run ++frontend,33706::budget run ++frontend-proxy,9650::budget run ++grafana,119257::budget run ++grafana-sc-alerts,641::budget run ++grafana-sc-dashboard,907::budget run ++grafana-sc-datasources,650::budget run ++image-provider,1630::budget run ++init-config,538::budget run ++jaeger,6586::budget run ++kafka,94276::budget run ++kube-proxy,14903::budget run ++load-generator,742::budget run ++metrics-server,2323::budget run ++opensearch,25247::budget run ++opentelemetry-collector,132004::budget run ++payment,252::budget run ++postgresql,2275::budget run ++prometheus-server,5894::budget run ++quote,40::budget run ++recommendation,4208::budget run ++valkey-cart,17153::budget run ++wait-for-kafka,4182::budget run ++wait-for-valkey-cart,476::budget run ++*,2299::budget run +diff --git a/reports/latest.md b/reports/latest.md +index e35ef5c..5b383cb 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:31:12.000Z ++# Hot-tier run: 2026-10-26T00:32:11.000Z + +-Hot tier: 13 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. ++Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 9 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +-- Each counted byte takes 1.59 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 2.9 GB a day; 179 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 160 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.41 bytes of store kept, 0.57 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 3 GB a day; 186 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 155 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 3388 | +-| ad | the frozen tier | 1 | 100 MB | 3 MB | 3081 | 9581 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 64 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 308 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 392 | +-| cart | the frozen tier | 1 | 238 MB | 2 MB | 3081 | 6624 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2469 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 92 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 269 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 870 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 154 | +-| fluentd-10x | the frozen tier | 1 | 19 MB | 3 MB | 3081 | 8553 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 230 | +-| frontend | the frozen tier | 1 | 57 MB | 12 MB | 3081 | 33734 | +-| frontend-proxy | the frozen tier | 1 | 4 MB | 4 MB | 3081 | 10138 | +-| grafana | the frozen tier | 1 | 52 MB | 44 MB | 3081 | 122725 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 673 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 952 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 683 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 1712 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 566 | +-| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 6919 | +-| kafka | the frozen tier | 1 | 455 MB | 28 MB | 3081 | 78110 | +-| kube-proxy | the frozen tier | 1 | 6 MB | 5 MB | 3081 | 14525 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 779 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2440 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 3081 | 25525 | +-| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 48 MB | 3081 | 133965 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 265 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 3081 | 2390 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 3081 | 5813 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 42 | +-| recommendation | the frozen tier | 1 | 62 MB | 1 MB | 3081 | 3245 | +-| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 3081 | 15762 | +-| wait-for-kafka | the frozen tier | 1 | 2 MB | 1 MB | 3081 | 3217 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 3081 | 500 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 3081 | 2415 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 3225 | ++| ad | the frozen tier | 1 | 106 MB | 4 MB | 4051 | 12477 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 61 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 293 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 373 | ++| cart | the frozen tier | 1 | 251 MB | 3 MB | 4051 | 8544 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2351 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 88 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 256 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 828 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 146 | ++| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4051 | 9261 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 219 | ++| frontend | the frozen tier | 1 | 58 MB | 12 MB | 4051 | 33706 | ++| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4051 | 9650 | ++| grafana | the frozen tier | 1 | 50 MB | 43 MB | 4051 | 119257 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 641 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 907 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 650 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 1630 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 538 | ++| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 6586 | ++| kafka | the frozen tier | 1 | 476 MB | 34 MB | 4051 | 94276 | ++| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4051 | 14903 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 742 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2323 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4051 | 25247 | ++| opentelemetry-collector | the frozen tier | 1 | 2 GB | 48 MB | 4051 | 132004 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 252 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2275 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 5894 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 40 | ++| recommendation | the frozen tier | 1 | 67 MB | 2 MB | 4051 | 4208 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4051 | 17153 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 4182 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 476 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4051 | 2299 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.json new file mode 100644 index 0000000..e9fdafe --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/commit.json @@ -0,0 +1 @@ +{"before":"74d3d473d13dfd1093ff84a85d1dcd948e2bbdaf","after":"3aee0d6bca3d40f7ee6c384766b051e592608944","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/config-generation.csv new file mode 100644 index 0000000..ce5c893 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,946754def770 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/latest.md new file mode 100644 index 0000000..5b383cb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:32:11.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.41 bytes of store kept, 0.57 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3 GB a day; 186 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 155 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 3225 | +| ad | the frozen tier | 1 | 106 MB | 4 MB | 4051 | 12477 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 61 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 293 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 373 | +| cart | the frozen tier | 1 | 251 MB | 3 MB | 4051 | 8544 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2351 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 88 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 256 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 828 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 146 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4051 | 9261 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 219 | +| frontend | the frozen tier | 1 | 58 MB | 12 MB | 4051 | 33706 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4051 | 9650 | +| grafana | the frozen tier | 1 | 50 MB | 43 MB | 4051 | 119257 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 641 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 907 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 650 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 1630 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 538 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 6586 | +| kafka | the frozen tier | 1 | 476 MB | 34 MB | 4051 | 94276 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4051 | 14903 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 742 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2323 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4051 | 25247 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 48 MB | 4051 | 132004 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 252 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2275 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 5894 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 40 | +| recommendation | the frozen tier | 1 | 67 MB | 2 MB | 4051 | 4208 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4051 | 17153 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 4182 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 476 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4051 | 2299 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/report.txt new file mode 100644 index 0000000..f7d2bb9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.41 bytes of store kept, 0.57 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 3 GB a day; 186 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 155 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:32:11.000Z + +Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.41 bytes of store kept, 0.57 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3 GB a day; 186 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 155 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 3225 | +| ad | the frozen tier | 1 | 106 MB | 4 MB | 4051 | 12477 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 61 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 293 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 373 | +| cart | the frozen tier | 1 | 251 MB | 3 MB | 4051 | 8544 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2351 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 88 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 256 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 828 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 146 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4051 | 9261 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 219 | +| frontend | the frozen tier | 1 | 58 MB | 12 MB | 4051 | 33706 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4051 | 9650 | +| grafana | the frozen tier | 1 | 50 MB | 43 MB | 4051 | 119257 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 641 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 907 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 650 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 1630 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 538 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 6586 | +| kafka | the frozen tier | 1 | 476 MB | 34 MB | 4051 | 94276 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4051 | 14903 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 742 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2323 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4051 | 25247 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 48 MB | 4051 | 132004 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 252 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2275 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 5894 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 40 | +| recommendation | the frozen tier | 1 | 67 MB | 2 MB | 4051 | 4208 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4051 | 17153 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 4182 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 476 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4051 | 2299 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/run.json new file mode 100644 index 0000000..c37e1fb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:32:13.932Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/totals.csv new file mode 100644 index 0000000..e1c921f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003210Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,3225::budget run +ad,12477::budget run +aws-eks-nodeagent,61::budget run +aws-node,293::budget run +aws-vpc-cni-init,373::budget run +cart,8544::budget run +coredns,2351::budget run +currency,88::budget run +email,256::budget run +flagd,828::budget run +flagd-ui,146::budget run +fluentd-10x,9261::budget run +fraud-detection,219::budget run +frontend,33706::budget run +frontend-proxy,9650::budget run +grafana,119257::budget run +grafana-sc-alerts,641::budget run +grafana-sc-dashboard,907::budget run +grafana-sc-datasources,650::budget run +image-provider,1630::budget run +init-config,538::budget run +jaeger,6586::budget run +kafka,94276::budget run +kube-proxy,14903::budget run +load-generator,742::budget run +metrics-server,2323::budget run +opensearch,25247::budget run +opentelemetry-collector,132004::budget run +payment,252::budget run +postgresql,2275::budget run +prometheus-server,5894::budget run +quote,40::budget run +recommendation,4208::budget run +valkey-cart,17153::budget run +wait-for-kafka,4182::budget run +wait-for-valkey-cart,476::budget run +*,2299::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/caps.csv new file mode 100644 index 0000000..08efb8b --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,1194::budget run +ad,1194::budget run +aws-eks-nodeagent,1194::budget run +aws-node,1194::budget run +aws-vpc-cni-init,1194::budget run +cart,1194::budget run +coredns,1194::budget run +currency,1194::budget run +email,1194::budget run +flagd,1194::budget run +flagd-ui,1194::budget run +fluentd-10x,1194::budget run +fraud-detection,1194::budget run +frontend,1194::budget run +frontend-proxy,1194::budget run +grafana,1194::budget run +grafana-sc-alerts,1194::budget run +grafana-sc-dashboard,1194::budget run +grafana-sc-datasources,1194::budget run +image-provider,1194::budget run +init-config,1194::budget run +jaeger,1194::budget run +kafka,1194::budget run +kube-proxy,1194::budget run +load-generator,1194::budget run +metrics-server,1194::budget run +opensearch,1194::budget run +opentelemetry-collector,1194::budget run +payment,1194::budget run +postgresql,1194::budget run +prometheus-server,1194::budget run +quote,1194::budget run +recommendation,1194::budget run +valkey-cart,1194::budget run +wait-for-kafka,1194::budget run +wait-for-valkey-cart,1194::budget run +*,1194::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.diff new file mode 100644 index 0000000..60390a6 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.diff @@ -0,0 +1,268 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index ede54d2..08efb8b 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,4051::budget run +-ad,4051::budget run +-aws-eks-nodeagent,4051::budget run +-aws-node,4051::budget run +-aws-vpc-cni-init,4051::budget run +-cart,4051::budget run +-coredns,4051::budget run +-currency,4051::budget run +-email,4051::budget run +-flagd,4051::budget run +-flagd-ui,4051::budget run +-fluentd-10x,4051::budget run +-fraud-detection,4051::budget run +-frontend,4051::budget run +-frontend-proxy,4051::budget run +-grafana,4051::budget run +-grafana-sc-alerts,4051::budget run +-grafana-sc-dashboard,4051::budget run +-grafana-sc-datasources,4051::budget run +-image-provider,4051::budget run +-init-config,4051::budget run +-jaeger,4051::budget run +-kafka,4051::budget run +-kube-proxy,4051::budget run +-load-generator,4051::budget run +-metrics-server,4051::budget run +-opensearch,4051::budget run +-opentelemetry-collector,4051::budget run +-payment,4051::budget run +-postgresql,4051::budget run +-prometheus-server,4051::budget run +-quote,4051::budget run +-recommendation,4051::budget run +-valkey-cart,4051::budget run +-wait-for-kafka,4051::budget run +-wait-for-valkey-cart,4051::budget run +-*,4051::budget run ++accounting,1194::budget run ++ad,1194::budget run ++aws-eks-nodeagent,1194::budget run ++aws-node,1194::budget run ++aws-vpc-cni-init,1194::budget run ++cart,1194::budget run ++coredns,1194::budget run ++currency,1194::budget run ++email,1194::budget run ++flagd,1194::budget run ++flagd-ui,1194::budget run ++fluentd-10x,1194::budget run ++fraud-detection,1194::budget run ++frontend,1194::budget run ++frontend-proxy,1194::budget run ++grafana,1194::budget run ++grafana-sc-alerts,1194::budget run ++grafana-sc-dashboard,1194::budget run ++grafana-sc-datasources,1194::budget run ++image-provider,1194::budget run ++init-config,1194::budget run ++jaeger,1194::budget run ++kafka,1194::budget run ++kube-proxy,1194::budget run ++load-generator,1194::budget run ++metrics-server,1194::budget run ++opensearch,1194::budget run ++opentelemetry-collector,1194::budget run ++payment,1194::budget run ++postgresql,1194::budget run ++prometheus-server,1194::budget run ++quote,1194::budget run ++recommendation,1194::budget run ++valkey-cart,1194::budget run ++wait-for-kafka,1194::budget run ++wait-for-valkey-cart,1194::budget run ++*,1194::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index ce5c893..52b5199 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,946754def770 ++generation,f2c3ec363524 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index e1c921f..a2ed0c8 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,3225::budget run +-ad,12477::budget run +-aws-eks-nodeagent,61::budget run +-aws-node,293::budget run +-aws-vpc-cni-init,373::budget run +-cart,8544::budget run +-coredns,2351::budget run +-currency,88::budget run +-email,256::budget run +-flagd,828::budget run +-flagd-ui,146::budget run +-fluentd-10x,9261::budget run +-fraud-detection,219::budget run +-frontend,33706::budget run +-frontend-proxy,9650::budget run +-grafana,119257::budget run +-grafana-sc-alerts,641::budget run +-grafana-sc-dashboard,907::budget run +-grafana-sc-datasources,650::budget run +-image-provider,1630::budget run +-init-config,538::budget run +-jaeger,6586::budget run +-kafka,94276::budget run +-kube-proxy,14903::budget run +-load-generator,742::budget run +-metrics-server,2323::budget run +-opensearch,25247::budget run +-opentelemetry-collector,132004::budget run +-payment,252::budget run +-postgresql,2275::budget run +-prometheus-server,5894::budget run +-quote,40::budget run +-recommendation,4208::budget run +-valkey-cart,17153::budget run +-wait-for-kafka,4182::budget run +-wait-for-valkey-cart,476::budget run +-*,2299::budget run ++accounting,3079::budget run ++ad,5563::budget run ++aws-eks-nodeagent,59::budget run ++aws-node,279::budget run ++aws-vpc-cni-init,356::budget run ++cart,3503::budget run ++coredns,2244::budget run ++currency,84::budget run ++email,245::budget run ++flagd,791::budget run ++flagd-ui,139::budget run ++fluentd-10x,6709::budget run ++fraud-detection,209::budget run ++frontend,33682::budget run ++frontend-proxy,9214::budget run ++grafana,112124::budget run ++grafana-sc-alerts,612::budget run ++grafana-sc-dashboard,866::budget run ++grafana-sc-datasources,620::budget run ++image-provider,1556::budget run ++init-config,514::budget run ++jaeger,6288::budget run ++kafka,53701::budget run ++kube-proxy,9742::budget run ++load-generator,708::budget run ++metrics-server,2218::budget run ++opensearch,22484::budget run ++opentelemetry-collector,123327::budget run ++payment,240::budget run ++postgresql,2173::budget run ++prometheus-server,4382::budget run ++quote,39::budget run ++recommendation,2649::budget run ++valkey-cart,6817::budget run ++wait-for-kafka,1318::budget run ++wait-for-valkey-cart,455::budget run ++*,1864::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 5b383cb..e3ce607 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:32:11.000Z ++# Hot-tier run: 2026-10-26T00:33:09.000Z + +-Hot tier: 15 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.8 GB a day of counted lines moved to the frozen tier. ++Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 2 indices; its tier_down lines not yet moved: 12 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 1. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +-- Each counted byte takes 1.41 bytes of store kept, 0.57 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 3 GB a day; 186 MB a day fits the size, so each statement keeps up to 1 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 155 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.74 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 3.2 GB a day; 151 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 151 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 3225 | +-| ad | the frozen tier | 1 | 106 MB | 4 MB | 4051 | 12477 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 61 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 293 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 373 | +-| cart | the frozen tier | 1 | 251 MB | 3 MB | 4051 | 8544 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2351 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 88 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 256 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 828 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 146 | +-| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4051 | 9261 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 219 | +-| frontend | the frozen tier | 1 | 58 MB | 12 MB | 4051 | 33706 | +-| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4051 | 9650 | +-| grafana | the frozen tier | 1 | 50 MB | 43 MB | 4051 | 119257 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 641 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 907 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 650 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 1630 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 538 | +-| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 6586 | +-| kafka | the frozen tier | 1 | 476 MB | 34 MB | 4051 | 94276 | +-| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4051 | 14903 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 742 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2323 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4051 | 25247 | +-| opentelemetry-collector | the frozen tier | 1 | 2 GB | 48 MB | 4051 | 132004 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 252 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4051 | 2275 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 5894 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 40 | +-| recommendation | the frozen tier | 1 | 67 MB | 2 MB | 4051 | 4208 | +-| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4051 | 17153 | +-| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4051 | 4182 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4051 | 476 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4051 | 2299 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 3079 | ++| ad | the frozen tier | 1 | 110 MB | 2 MB | 1194 | 5563 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 59 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 279 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 356 | ++| cart | the frozen tier | 1 | 263 MB | 1 MB | 1194 | 3503 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2244 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 84 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 245 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 791 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 139 | ++| fluentd-10x | the frozen tier | 1 | 20 MB | 2 MB | 1194 | 6709 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 209 | ++| frontend | the frozen tier | 1 | 62 MB | 12 MB | 1194 | 33682 | ++| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 1194 | 9214 | ++| grafana | the frozen tier | 1 | 49 MB | 40 MB | 1194 | 112124 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 612 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 866 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 620 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 1556 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 514 | ++| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 6288 | ++| kafka | the frozen tier | 1 | 497 MB | 19 MB | 1194 | 53701 | ++| kube-proxy | the frozen tier | 1 | 5 MB | 4 MB | 1194 | 9742 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 708 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2218 | ++| opensearch | the frozen tier | 1 | 9 MB | 8 MB | 1194 | 22484 | ++| opentelemetry-collector | the frozen tier | 1 | 2 GB | 44 MB | 1194 | 123327 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 240 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2173 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 4382 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 39 | ++| recommendation | the frozen tier | 1 | 71 MB | 1 MB | 1194 | 2649 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 2 MB | 1194 | 6817 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 0 MB | 1194 | 1318 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 455 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1194 | 1864 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.json new file mode 100644 index 0000000..687f040 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/commit.json @@ -0,0 +1 @@ +{"before":"3aee0d6bca3d40f7ee6c384766b051e592608944","after":"5b00b5892c77762542b5dac9d49f134eba096e59","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/config-generation.csv new file mode 100644 index 0000000..52b5199 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,f2c3ec363524 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/latest.md new file mode 100644 index 0000000..e3ce607 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:33:09.000Z + +Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.74 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3.2 GB a day; 151 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 151 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 3079 | +| ad | the frozen tier | 1 | 110 MB | 2 MB | 1194 | 5563 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 59 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 279 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 356 | +| cart | the frozen tier | 1 | 263 MB | 1 MB | 1194 | 3503 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2244 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 84 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 245 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 791 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 139 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 2 MB | 1194 | 6709 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 209 | +| frontend | the frozen tier | 1 | 62 MB | 12 MB | 1194 | 33682 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 1194 | 9214 | +| grafana | the frozen tier | 1 | 49 MB | 40 MB | 1194 | 112124 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 612 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 866 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 620 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 1556 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 514 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 6288 | +| kafka | the frozen tier | 1 | 497 MB | 19 MB | 1194 | 53701 | +| kube-proxy | the frozen tier | 1 | 5 MB | 4 MB | 1194 | 9742 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 708 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2218 | +| opensearch | the frozen tier | 1 | 9 MB | 8 MB | 1194 | 22484 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 44 MB | 1194 | 123327 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 240 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2173 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 4382 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 39 | +| recommendation | the frozen tier | 1 | 71 MB | 1 MB | 1194 | 2649 | +| valkey-cart | the frozen tier | 1 | 6 MB | 2 MB | 1194 | 6817 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 0 MB | 1194 | 1318 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 455 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1194 | 1864 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/report.txt new file mode 100644 index 0000000..aebb0bb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 1. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.74 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 3.2 GB a day; 151 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 151 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:33:09.000Z + +Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 1. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.74 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3.2 GB a day; 151 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 151 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 3079 | +| ad | the frozen tier | 1 | 110 MB | 2 MB | 1194 | 5563 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 59 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 279 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 356 | +| cart | the frozen tier | 1 | 263 MB | 1 MB | 1194 | 3503 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2244 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 84 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 245 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 791 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 139 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 2 MB | 1194 | 6709 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 209 | +| frontend | the frozen tier | 1 | 62 MB | 12 MB | 1194 | 33682 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 1194 | 9214 | +| grafana | the frozen tier | 1 | 49 MB | 40 MB | 1194 | 112124 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 612 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 866 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 620 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 1556 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 514 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 6288 | +| kafka | the frozen tier | 1 | 497 MB | 19 MB | 1194 | 53701 | +| kube-proxy | the frozen tier | 1 | 5 MB | 4 MB | 1194 | 9742 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 708 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2218 | +| opensearch | the frozen tier | 1 | 9 MB | 8 MB | 1194 | 22484 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 44 MB | 1194 | 123327 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 240 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2173 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 4382 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 39 | +| recommendation | the frozen tier | 1 | 71 MB | 1 MB | 1194 | 2649 | +| valkey-cart | the frozen tier | 1 | 6 MB | 2 MB | 1194 | 6817 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 0 MB | 1194 | 1318 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 455 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1194 | 1864 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/run.json new file mode 100644 index 0000000..339f87f --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:33:12.300Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/totals.csv new file mode 100644 index 0000000..a2ed0c8 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003309Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,3079::budget run +ad,5563::budget run +aws-eks-nodeagent,59::budget run +aws-node,279::budget run +aws-vpc-cni-init,356::budget run +cart,3503::budget run +coredns,2244::budget run +currency,84::budget run +email,245::budget run +flagd,791::budget run +flagd-ui,139::budget run +fluentd-10x,6709::budget run +fraud-detection,209::budget run +frontend,33682::budget run +frontend-proxy,9214::budget run +grafana,112124::budget run +grafana-sc-alerts,612::budget run +grafana-sc-dashboard,866::budget run +grafana-sc-datasources,620::budget run +image-provider,1556::budget run +init-config,514::budget run +jaeger,6288::budget run +kafka,53701::budget run +kube-proxy,9742::budget run +load-generator,708::budget run +metrics-server,2218::budget run +opensearch,22484::budget run +opentelemetry-collector,123327::budget run +payment,240::budget run +postgresql,2173::budget run +prometheus-server,4382::budget run +quote,39::budget run +recommendation,2649::budget run +valkey-cart,6817::budget run +wait-for-kafka,1318::budget run +wait-for-valkey-cart,455::budget run +*,1864::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/caps.csv new file mode 100644 index 0000000..8b572bc --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,4768::budget run +ad,4768::budget run +aws-eks-nodeagent,4768::budget run +aws-node,4768::budget run +aws-vpc-cni-init,4768::budget run +cart,4768::budget run +coredns,4768::budget run +currency,4768::budget run +email,4768::budget run +flagd,4768::budget run +flagd-ui,4768::budget run +fluentd-10x,4768::budget run +fraud-detection,4768::budget run +frontend,4768::budget run +frontend-proxy,4768::budget run +grafana,4768::budget run +grafana-sc-alerts,4768::budget run +grafana-sc-dashboard,4768::budget run +grafana-sc-datasources,4768::budget run +image-provider,4768::budget run +init-config,4768::budget run +jaeger,4768::budget run +kafka,4768::budget run +kube-proxy,4768::budget run +load-generator,4768::budget run +metrics-server,4768::budget run +opensearch,4768::budget run +opentelemetry-collector,4768::budget run +payment,4768::budget run +postgresql,4768::budget run +prometheus-server,4768::budget run +quote,4768::budget run +recommendation,4768::budget run +valkey-cart,4768::budget run +wait-for-kafka,4768::budget run +wait-for-valkey-cart,4768::budget run +*,4768::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.diff new file mode 100644 index 0000000..a680492 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.diff @@ -0,0 +1,268 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index 08efb8b..8b572bc 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,1194::budget run +-ad,1194::budget run +-aws-eks-nodeagent,1194::budget run +-aws-node,1194::budget run +-aws-vpc-cni-init,1194::budget run +-cart,1194::budget run +-coredns,1194::budget run +-currency,1194::budget run +-email,1194::budget run +-flagd,1194::budget run +-flagd-ui,1194::budget run +-fluentd-10x,1194::budget run +-fraud-detection,1194::budget run +-frontend,1194::budget run +-frontend-proxy,1194::budget run +-grafana,1194::budget run +-grafana-sc-alerts,1194::budget run +-grafana-sc-dashboard,1194::budget run +-grafana-sc-datasources,1194::budget run +-image-provider,1194::budget run +-init-config,1194::budget run +-jaeger,1194::budget run +-kafka,1194::budget run +-kube-proxy,1194::budget run +-load-generator,1194::budget run +-metrics-server,1194::budget run +-opensearch,1194::budget run +-opentelemetry-collector,1194::budget run +-payment,1194::budget run +-postgresql,1194::budget run +-prometheus-server,1194::budget run +-quote,1194::budget run +-recommendation,1194::budget run +-valkey-cart,1194::budget run +-wait-for-kafka,1194::budget run +-wait-for-valkey-cart,1194::budget run +-*,1194::budget run ++accounting,4768::budget run ++ad,4768::budget run ++aws-eks-nodeagent,4768::budget run ++aws-node,4768::budget run ++aws-vpc-cni-init,4768::budget run ++cart,4768::budget run ++coredns,4768::budget run ++currency,4768::budget run ++email,4768::budget run ++flagd,4768::budget run ++flagd-ui,4768::budget run ++fluentd-10x,4768::budget run ++fraud-detection,4768::budget run ++frontend,4768::budget run ++frontend-proxy,4768::budget run ++grafana,4768::budget run ++grafana-sc-alerts,4768::budget run ++grafana-sc-dashboard,4768::budget run ++grafana-sc-datasources,4768::budget run ++image-provider,4768::budget run ++init-config,4768::budget run ++jaeger,4768::budget run ++kafka,4768::budget run ++kube-proxy,4768::budget run ++load-generator,4768::budget run ++metrics-server,4768::budget run ++opensearch,4768::budget run ++opentelemetry-collector,4768::budget run ++payment,4768::budget run ++postgresql,4768::budget run ++prometheus-server,4768::budget run ++quote,4768::budget run ++recommendation,4768::budget run ++valkey-cart,4768::budget run ++wait-for-kafka,4768::budget run ++wait-for-valkey-cart,4768::budget run ++*,4768::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index 52b5199..b34cbf8 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,f2c3ec363524 ++generation,bbddfb473fb5 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index a2ed0c8..7bd44df 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,3079::budget run +-ad,5563::budget run +-aws-eks-nodeagent,59::budget run +-aws-node,279::budget run +-aws-vpc-cni-init,356::budget run +-cart,3503::budget run +-coredns,2244::budget run +-currency,84::budget run +-email,245::budget run +-flagd,791::budget run +-flagd-ui,139::budget run +-fluentd-10x,6709::budget run +-fraud-detection,209::budget run +-frontend,33682::budget run +-frontend-proxy,9214::budget run +-grafana,112124::budget run +-grafana-sc-alerts,612::budget run +-grafana-sc-dashboard,866::budget run +-grafana-sc-datasources,620::budget run +-image-provider,1556::budget run +-init-config,514::budget run +-jaeger,6288::budget run +-kafka,53701::budget run +-kube-proxy,9742::budget run +-load-generator,708::budget run +-metrics-server,2218::budget run +-opensearch,22484::budget run +-opentelemetry-collector,123327::budget run +-payment,240::budget run +-postgresql,2173::budget run +-prometheus-server,4382::budget run +-quote,39::budget run +-recommendation,2649::budget run +-valkey-cart,6817::budget run +-wait-for-kafka,1318::budget run +-wait-for-valkey-cart,455::budget run +-*,1864::budget run ++accounting,2937::budget run ++ad,14597::budget run ++aws-eks-nodeagent,56::budget run ++aws-node,267::budget run ++aws-vpc-cni-init,340::budget run ++cart,9977::budget run ++coredns,2141::budget run ++currency,80::budget run ++email,233::budget run ++flagd,754::budget run ++flagd-ui,133::budget run ++fluentd-10x,9513::budget run ++fraud-detection,199::budget run ++frontend,33660::budget run ++frontend-proxy,8790::budget run ++grafana,111334::budget run ++grafana-sc-alerts,584::budget run ++grafana-sc-dashboard,826::budget run ++grafana-sc-datasources,592::budget run ++image-provider,1485::budget run ++init-config,490::budget run ++jaeger,5999::budget run ++kafka,100246::budget run ++kube-proxy,13914::budget run ++load-generator,676::budget run ++metrics-server,2115::budget run ++opensearch,23928::budget run ++opentelemetry-collector,125706::budget run ++payment,229::budget run ++postgresql,2072::budget run ++prometheus-server,6079::budget run ++quote,37::budget run ++recommendation,4911::budget run ++valkey-cart,16973::budget run ++wait-for-kafka,4886::budget run ++wait-for-valkey-cart,434::budget run ++*,2094::budget run +diff --git a/reports/latest.md b/reports/latest.md +index e3ce607..8d1f8bf 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:33:09.000Z ++# Hot-tier run: 2026-10-26T00:34:11.000Z + +-Hot tier: 17 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 3 GB a day of counted lines moved to the frozen tier. ++Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier. + +-- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 5 MB in 2 indices; its tier_down lines not yet moved: 13 MB in 1. ++- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +-- Each counted byte takes 1.74 bytes of store kept, 0.53 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 3.2 GB a day; 151 MB a day fits the size, so each statement keeps up to 0 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 151 MB a day on hot whatever the limits; the size holds down to that floor. ++- Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). ++- The Receiver's statements send 3.1 GB a day; 183 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 146 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 3079 | +-| ad | the frozen tier | 1 | 110 MB | 2 MB | 1194 | 5563 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 59 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 279 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 356 | +-| cart | the frozen tier | 1 | 263 MB | 1 MB | 1194 | 3503 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2244 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 84 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 245 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 791 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 139 | +-| fluentd-10x | the frozen tier | 1 | 20 MB | 2 MB | 1194 | 6709 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 209 | +-| frontend | the frozen tier | 1 | 62 MB | 12 MB | 1194 | 33682 | +-| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 1194 | 9214 | +-| grafana | the frozen tier | 1 | 49 MB | 40 MB | 1194 | 112124 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 612 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 866 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 620 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 1556 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 514 | +-| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 6288 | +-| kafka | the frozen tier | 1 | 497 MB | 19 MB | 1194 | 53701 | +-| kube-proxy | the frozen tier | 1 | 5 MB | 4 MB | 1194 | 9742 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 708 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2218 | +-| opensearch | the frozen tier | 1 | 9 MB | 8 MB | 1194 | 22484 | +-| opentelemetry-collector | the frozen tier | 1 | 2 GB | 44 MB | 1194 | 123327 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 240 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 1194 | 2173 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 1194 | 4382 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 39 | +-| recommendation | the frozen tier | 1 | 71 MB | 1 MB | 1194 | 2649 | +-| valkey-cart | the frozen tier | 1 | 6 MB | 2 MB | 1194 | 6817 | +-| wait-for-kafka | the frozen tier | 1 | 2 MB | 0 MB | 1194 | 1318 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 1194 | 455 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 1194 | 1864 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2937 | ++| ad | the frozen tier | 1 | 107 MB | 5 MB | 4768 | 14597 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 56 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 267 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 340 | ++| cart | the frozen tier | 1 | 260 MB | 4 MB | 4768 | 9977 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2141 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 80 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 233 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 754 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 133 | ++| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4768 | 9513 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 199 | ++| frontend | the frozen tier | 1 | 62 MB | 12 MB | 4768 | 33660 | ++| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4768 | 8790 | ++| grafana | the frozen tier | 1 | 47 MB | 40 MB | 4768 | 111334 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 584 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 826 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 592 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 1485 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 490 | ++| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 5999 | ++| kafka | the frozen tier | 1 | 490 MB | 36 MB | 4768 | 100246 | ++| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4768 | 13914 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 676 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2115 | ++| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4768 | 23928 | ++| opentelemetry-collector | the frozen tier | 1 | 2 GB | 45 MB | 4768 | 125706 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 229 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2072 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 6079 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 37 | ++| recommendation | the frozen tier | 1 | 70 MB | 2 MB | 4768 | 4911 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4768 | 16973 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 4886 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 434 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4768 | 2094 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.json new file mode 100644 index 0000000..c9ad6a1 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/commit.json @@ -0,0 +1 @@ +{"before":"5b00b5892c77762542b5dac9d49f134eba096e59","after":"11c9221f78ca19363f57e2bbed1752c4ae6105bc","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/config-generation.csv new file mode 100644 index 0000000..b34cbf8 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,bbddfb473fb5 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/latest.md new file mode 100644 index 0000000..8d1f8bf --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:34:11.000Z + +Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3.1 GB a day; 183 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 146 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2937 | +| ad | the frozen tier | 1 | 107 MB | 5 MB | 4768 | 14597 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 56 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 267 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 340 | +| cart | the frozen tier | 1 | 260 MB | 4 MB | 4768 | 9977 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2141 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 80 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 233 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 754 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 133 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4768 | 9513 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 199 | +| frontend | the frozen tier | 1 | 62 MB | 12 MB | 4768 | 33660 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4768 | 8790 | +| grafana | the frozen tier | 1 | 47 MB | 40 MB | 4768 | 111334 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 584 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 826 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 592 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 1485 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 490 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 5999 | +| kafka | the frozen tier | 1 | 490 MB | 36 MB | 4768 | 100246 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4768 | 13914 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 676 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2115 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4768 | 23928 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 45 MB | 4768 | 125706 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 229 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2072 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 6079 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 37 | +| recommendation | the frozen tier | 1 | 70 MB | 2 MB | 4768 | 4911 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4768 | 16973 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 4886 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 434 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4768 | 2094 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/report.txt new file mode 100644 index 0000000..55c92ef --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 3.1 GB a day; 183 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 146 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:34:11.000Z + +Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 3.1 GB a day; 183 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 146 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2937 | +| ad | the frozen tier | 1 | 107 MB | 5 MB | 4768 | 14597 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 56 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 267 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 340 | +| cart | the frozen tier | 1 | 260 MB | 4 MB | 4768 | 9977 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2141 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 80 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 233 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 754 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 133 | +| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4768 | 9513 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 199 | +| frontend | the frozen tier | 1 | 62 MB | 12 MB | 4768 | 33660 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4768 | 8790 | +| grafana | the frozen tier | 1 | 47 MB | 40 MB | 4768 | 111334 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 584 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 826 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 592 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 1485 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 490 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 5999 | +| kafka | the frozen tier | 1 | 490 MB | 36 MB | 4768 | 100246 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4768 | 13914 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 676 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2115 | +| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4768 | 23928 | +| opentelemetry-collector | the frozen tier | 1 | 2 GB | 45 MB | 4768 | 125706 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 229 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2072 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 6079 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 37 | +| recommendation | the frozen tier | 1 | 70 MB | 2 MB | 4768 | 4911 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4768 | 16973 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 4886 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 434 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4768 | 2094 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/run.json new file mode 100644 index 0000000..8e11360 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:34:14.149Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/totals.csv new file mode 100644 index 0000000..7bd44df --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003410Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,2937::budget run +ad,14597::budget run +aws-eks-nodeagent,56::budget run +aws-node,267::budget run +aws-vpc-cni-init,340::budget run +cart,9977::budget run +coredns,2141::budget run +currency,80::budget run +email,233::budget run +flagd,754::budget run +flagd-ui,133::budget run +fluentd-10x,9513::budget run +fraud-detection,199::budget run +frontend,33660::budget run +frontend-proxy,8790::budget run +grafana,111334::budget run +grafana-sc-alerts,584::budget run +grafana-sc-dashboard,826::budget run +grafana-sc-datasources,592::budget run +image-provider,1485::budget run +init-config,490::budget run +jaeger,5999::budget run +kafka,100246::budget run +kube-proxy,13914::budget run +load-generator,676::budget run +metrics-server,2115::budget run +opensearch,23928::budget run +opentelemetry-collector,125706::budget run +payment,229::budget run +postgresql,2072::budget run +prometheus-server,6079::budget run +quote,37::budget run +recommendation,4911::budget run +valkey-cart,16973::budget run +wait-for-kafka,4886::budget run +wait-for-valkey-cart,434::budget run +*,2094::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/actions.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/actions.csv new file mode 100644 index 0000000..ca15017 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/actions.csv @@ -0,0 +1,38 @@ +container,action +accounting,tier_down::budget run +ad,tier_down::budget run +aws-eks-nodeagent,tier_down::budget run +aws-node,tier_down::budget run +aws-vpc-cni-init,tier_down::budget run +cart,tier_down::budget run +coredns,tier_down::budget run +currency,tier_down::budget run +email,tier_down::budget run +flagd,tier_down::budget run +flagd-ui,tier_down::budget run +fluentd-10x,tier_down::budget run +fraud-detection,tier_down::budget run +frontend,tier_down::budget run +frontend-proxy,tier_down::budget run +grafana,tier_down::budget run +grafana-sc-alerts,tier_down::budget run +grafana-sc-dashboard,tier_down::budget run +grafana-sc-datasources,tier_down::budget run +image-provider,tier_down::budget run +init-config,tier_down::budget run +jaeger,tier_down::budget run +kafka,tier_down::budget run +kube-proxy,tier_down::budget run +load-generator,tier_down::budget run +metrics-server,tier_down::budget run +opensearch,tier_down::budget run +opentelemetry-collector,tier_down::budget run +payment,tier_down::budget run +postgresql,tier_down::budget run +prometheus-server,tier_down::budget run +quote,tier_down::budget run +recommendation,tier_down::budget run +valkey-cart,tier_down::budget run +wait-for-kafka,tier_down::budget run +wait-for-valkey-cart,tier_down::budget run +*,tier_down::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/caps.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/caps.csv new file mode 100644 index 0000000..81671a1 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/caps.csv @@ -0,0 +1,38 @@ +container,cap +accounting,6855::budget run +ad,6855::budget run +aws-eks-nodeagent,6855::budget run +aws-node,6855::budget run +aws-vpc-cni-init,6855::budget run +cart,6855::budget run +coredns,6855::budget run +currency,6855::budget run +email,6855::budget run +flagd,6855::budget run +flagd-ui,6855::budget run +fluentd-10x,6855::budget run +fraud-detection,6855::budget run +frontend,6855::budget run +frontend-proxy,6855::budget run +grafana,6855::budget run +grafana-sc-alerts,6855::budget run +grafana-sc-dashboard,6855::budget run +grafana-sc-datasources,6855::budget run +image-provider,6855::budget run +init-config,6855::budget run +jaeger,6855::budget run +kafka,6855::budget run +kube-proxy,6855::budget run +load-generator,6855::budget run +metrics-server,6855::budget run +opensearch,6855::budget run +opentelemetry-collector,6855::budget run +payment,6855::budget run +postgresql,6855::budget run +prometheus-server,6855::budget run +quote,6855::budget run +recommendation,6855::budget run +valkey-cart,6855::budget run +wait-for-kafka,6855::budget run +wait-for-valkey-cart,6855::budget run +*,6855::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.diff b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.diff new file mode 100644 index 0000000..fb02e7a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.diff @@ -0,0 +1,266 @@ +diff --git a/log10x/policy/caps.csv b/log10x/policy/caps.csv +index 8b572bc..81671a1 100644 +--- a/log10x/policy/caps.csv ++++ b/log10x/policy/caps.csv +@@ -1,38 +1,38 @@ + container,cap +-accounting,4768::budget run +-ad,4768::budget run +-aws-eks-nodeagent,4768::budget run +-aws-node,4768::budget run +-aws-vpc-cni-init,4768::budget run +-cart,4768::budget run +-coredns,4768::budget run +-currency,4768::budget run +-email,4768::budget run +-flagd,4768::budget run +-flagd-ui,4768::budget run +-fluentd-10x,4768::budget run +-fraud-detection,4768::budget run +-frontend,4768::budget run +-frontend-proxy,4768::budget run +-grafana,4768::budget run +-grafana-sc-alerts,4768::budget run +-grafana-sc-dashboard,4768::budget run +-grafana-sc-datasources,4768::budget run +-image-provider,4768::budget run +-init-config,4768::budget run +-jaeger,4768::budget run +-kafka,4768::budget run +-kube-proxy,4768::budget run +-load-generator,4768::budget run +-metrics-server,4768::budget run +-opensearch,4768::budget run +-opentelemetry-collector,4768::budget run +-payment,4768::budget run +-postgresql,4768::budget run +-prometheus-server,4768::budget run +-quote,4768::budget run +-recommendation,4768::budget run +-valkey-cart,4768::budget run +-wait-for-kafka,4768::budget run +-wait-for-valkey-cart,4768::budget run +-*,4768::budget run ++accounting,6855::budget run ++ad,6855::budget run ++aws-eks-nodeagent,6855::budget run ++aws-node,6855::budget run ++aws-vpc-cni-init,6855::budget run ++cart,6855::budget run ++coredns,6855::budget run ++currency,6855::budget run ++email,6855::budget run ++flagd,6855::budget run ++flagd-ui,6855::budget run ++fluentd-10x,6855::budget run ++fraud-detection,6855::budget run ++frontend,6855::budget run ++frontend-proxy,6855::budget run ++grafana,6855::budget run ++grafana-sc-alerts,6855::budget run ++grafana-sc-dashboard,6855::budget run ++grafana-sc-datasources,6855::budget run ++image-provider,6855::budget run ++init-config,6855::budget run ++jaeger,6855::budget run ++kafka,6855::budget run ++kube-proxy,6855::budget run ++load-generator,6855::budget run ++metrics-server,6855::budget run ++opensearch,6855::budget run ++opentelemetry-collector,6855::budget run ++payment,6855::budget run ++postgresql,6855::budget run ++prometheus-server,6855::budget run ++quote,6855::budget run ++recommendation,6855::budget run ++valkey-cart,6855::budget run ++wait-for-kafka,6855::budget run ++wait-for-valkey-cart,6855::budget run ++*,6855::budget run +diff --git a/log10x/policy/config-generation.csv b/log10x/policy/config-generation.csv +index b34cbf8..1b43ed9 100644 +--- a/log10x/policy/config-generation.csv ++++ b/log10x/policy/config-generation.csv +@@ -1,2 +1,2 @@ + key,value +-generation,bbddfb473fb5 ++generation,7f322a3fa798 +diff --git a/log10x/policy/totals.csv b/log10x/policy/totals.csv +index 7bd44df..3dfefe2 100644 +--- a/log10x/policy/totals.csv ++++ b/log10x/policy/totals.csv +@@ -1,38 +1,38 @@ + container,total +-accounting,2937::budget run +-ad,14597::budget run +-aws-eks-nodeagent,56::budget run +-aws-node,267::budget run +-aws-vpc-cni-init,340::budget run +-cart,9977::budget run +-coredns,2141::budget run +-currency,80::budget run +-email,233::budget run +-flagd,754::budget run +-flagd-ui,133::budget run +-fluentd-10x,9513::budget run +-fraud-detection,199::budget run +-frontend,33660::budget run +-frontend-proxy,8790::budget run +-grafana,111334::budget run +-grafana-sc-alerts,584::budget run +-grafana-sc-dashboard,826::budget run +-grafana-sc-datasources,592::budget run +-image-provider,1485::budget run +-init-config,490::budget run +-jaeger,5999::budget run +-kafka,100246::budget run +-kube-proxy,13914::budget run +-load-generator,676::budget run +-metrics-server,2115::budget run +-opensearch,23928::budget run +-opentelemetry-collector,125706::budget run +-payment,229::budget run +-postgresql,2072::budget run +-prometheus-server,6079::budget run +-quote,37::budget run +-recommendation,4911::budget run +-valkey-cart,16973::budget run +-wait-for-kafka,4886::budget run +-wait-for-valkey-cart,434::budget run +-*,2094::budget run ++accounting,2814::budget run ++ad,20847::budget run ++aws-eks-nodeagent,53::budget run ++aws-node,255::budget run ++aws-vpc-cni-init,325::budget run ++cart,14133::budget run ++coredns,2051::budget run ++currency,76::budget run ++email,224::budget run ++flagd,723::budget run ++flagd-ui,127::budget run ++fluentd-10x,11401::budget run ++fraud-detection,191::budget run ++frontend,33639::budget run ++frontend-proxy,8421::budget run ++grafana,108935::budget run ++grafana-sc-alerts,559::budget run ++grafana-sc-dashboard,791::budget run ++grafana-sc-datasources,567::budget run ++image-provider,1422::budget run ++init-config,470::budget run ++jaeger,5747::budget run ++kafka,125775::budget run ++kube-proxy,13330::budget run ++load-generator,647::budget run ++metrics-server,2027::budget run ++opensearch,22872::budget run ++opentelemetry-collector,130368::budget run ++payment,220::budget run ++postgresql,1985::budget run ++prometheus-server,5773::budget run ++quote,35::budget run ++recommendation,6992::budget run ++valkey-cart,15981::budget run ++wait-for-kafka,5332::budget run ++wait-for-valkey-cart,415::budget run ++*,2006::budget run +diff --git a/reports/latest.md b/reports/latest.md +index 8d1f8bf..dd33df9 100644 +--- a/reports/latest.md ++++ b/reports/latest.md +@@ -1,52 +1,52 @@ +-# Hot-tier run: 2026-10-26T00:34:11.000Z ++# Hot-tier run: 2026-10-26T00:35:10.000Z + +-Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.9 GB a day of counted lines moved to the frozen tier. ++Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + + - Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. + - A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). + - Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +-- The Receiver's statements send 3.1 GB a day; 183 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +-- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 146 MB a day on hot whatever the limits; the size holds down to that floor. ++- The Receiver's statements send 2.9 GB a day; 196 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. ++- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 142 MB a day on hot whatever the limits; the size holds down to that floor. + - Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + + | Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | + |---|---|---|---|---|---|---| +-| accounting | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2937 | +-| ad | the frozen tier | 1 | 107 MB | 5 MB | 4768 | 14597 | +-| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 56 | +-| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 267 | +-| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 340 | +-| cart | the frozen tier | 1 | 260 MB | 4 MB | 4768 | 9977 | +-| coredns | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2141 | +-| currency | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 80 | +-| email | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 233 | +-| flagd | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 754 | +-| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 133 | +-| fluentd-10x | the frozen tier | 1 | 20 MB | 3 MB | 4768 | 9513 | +-| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 199 | +-| frontend | the frozen tier | 1 | 62 MB | 12 MB | 4768 | 33660 | +-| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 4768 | 8790 | +-| grafana | the frozen tier | 1 | 47 MB | 40 MB | 4768 | 111334 | +-| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 584 | +-| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 826 | +-| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 592 | +-| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 1485 | +-| init-config | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 490 | +-| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 5999 | +-| kafka | the frozen tier | 1 | 490 MB | 36 MB | 4768 | 100246 | +-| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 4768 | 13914 | +-| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 676 | +-| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2115 | +-| opensearch | the frozen tier | 1 | 9 MB | 9 MB | 4768 | 23928 | +-| opentelemetry-collector | the frozen tier | 1 | 2 GB | 45 MB | 4768 | 125706 | +-| payment | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 229 | +-| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 4768 | 2072 | +-| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 6079 | +-| quote | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 37 | +-| recommendation | the frozen tier | 1 | 70 MB | 2 MB | 4768 | 4911 | +-| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 4768 | 16973 | +-| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 4768 | 4886 | +-| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 4768 | 434 | +-| `*` (any other service) | the frozen tier | 1 | | 1 MB | 4768 | 2094 | ++| accounting | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2814 | ++| ad | the frozen tier | 1 | 99 MB | 8 MB | 6855 | 20847 | ++| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 53 | ++| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 255 | ++| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 325 | ++| cart | the frozen tier | 1 | 241 MB | 5 MB | 6855 | 14133 | ++| coredns | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2051 | ++| currency | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 76 | ++| email | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 224 | ++| flagd | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 723 | ++| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 127 | ++| fluentd-10x | the frozen tier | 1 | 19 MB | 4 MB | 6855 | 11401 | ++| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 191 | ++| frontend | the frozen tier | 1 | 58 MB | 12 MB | 6855 | 33639 | ++| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 6855 | 8421 | ++| grafana | the frozen tier | 1 | 45 MB | 39 MB | 6855 | 108935 | ++| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 559 | ++| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 791 | ++| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 567 | ++| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1422 | ++| init-config | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 470 | ++| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5747 | ++| kafka | the frozen tier | 1 | 455 MB | 45 MB | 6855 | 125775 | ++| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 6855 | 13330 | ++| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 647 | ++| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2027 | ++| opensearch | the frozen tier | 1 | 8 MB | 8 MB | 6855 | 22872 | ++| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 47 MB | 6855 | 130368 | ++| payment | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 220 | ++| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1985 | ++| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5773 | ++| quote | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 35 | ++| recommendation | the frozen tier | 1 | 65 MB | 3 MB | 6855 | 6992 | ++| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 6855 | 15981 | ++| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5332 | ++| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 415 | ++| `*` (any other service) | the frozen tier | 1 | | 1 MB | 6855 | 2006 | + + Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.json new file mode 100644 index 0000000..0a1d9b4 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/commit.json @@ -0,0 +1 @@ +{"before":"11c9221f78ca19363f57e2bbed1752c4ae6105bc","after":"dca4133ef2fbbfc884b3e95aeabdd6af9ad1054f","exit":0} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/config-generation.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/config-generation.csv new file mode 100644 index 0000000..1b43ed9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/config-generation.csv @@ -0,0 +1,2 @@ +key,value +generation,7f322a3fa798 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/exit b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/exit @@ -0,0 +1 @@ +0 diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/latest.md b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/latest.md new file mode 100644 index 0000000..dd33df9 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/latest.md @@ -0,0 +1,52 @@ +# Hot-tier run: 2026-10-26T00:35:10.000Z + +Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.9 GB a day; 196 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 142 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2814 | +| ad | the frozen tier | 1 | 99 MB | 8 MB | 6855 | 20847 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 53 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 255 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 325 | +| cart | the frozen tier | 1 | 241 MB | 5 MB | 6855 | 14133 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2051 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 76 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 224 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 723 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 127 | +| fluentd-10x | the frozen tier | 1 | 19 MB | 4 MB | 6855 | 11401 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 191 | +| frontend | the frozen tier | 1 | 58 MB | 12 MB | 6855 | 33639 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 6855 | 8421 | +| grafana | the frozen tier | 1 | 45 MB | 39 MB | 6855 | 108935 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 559 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 791 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 567 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1422 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 470 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5747 | +| kafka | the frozen tier | 1 | 455 MB | 45 MB | 6855 | 125775 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 6855 | 13330 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 647 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2027 | +| opensearch | the frozen tier | 1 | 8 MB | 8 MB | 6855 | 22872 | +| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 47 MB | 6855 | 130368 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 220 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1985 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5773 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 35 | +| recommendation | the frozen tier | 1 | 65 MB | 3 MB | 6855 | 6992 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 6855 | 15981 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5332 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 415 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 6855 | 2006 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/report.txt b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/report.txt new file mode 100644 index 0000000..d608d9d --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/report.txt @@ -0,0 +1,61 @@ +[tenx-recur] policy loaded: target=30% services=all lookback=24h min_delta=2pp +[tenx-recur] Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. +[tenx-recur] Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +[tenx-recur] A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +[tenx-recur] Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +[tenx-recur] The Receiver's statements send 2.9 GB a day; 196 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +[tenx-recur] The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 142 MB a day on hot whatever the limits; the size holds down to that floor. +# Hot-tier run: 2026-10-26T00:35:10.000Z + +Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier. + +- Outside the Receiver: 0 MB on hot. The Receiver's kept lines: 4 MB in 3 indices; its tier_down lines not yet moved: 15 MB in 2. +- A kept line stays on hot 2 hours (ILM policy tenx-keep (rollover max_age 10m + frozen min_age 110m)); a tier_down index 0.3 hours (rollover max_age 10m + a median 7 minutes from rollover to mount over 1 moved indices). +- Each counted byte takes 1.37 bytes of store kept, 0.58 as tier_down (measured on the indices on hot). +- The Receiver's statements send 2.9 GB a day; 196 MB a day fits the size, so each statement keeps up to 2 MB a day and the noisiest give way first. +- The always-pass sample (5 lines a statement a window on every node, 50 more for an error statement over its limit) keeps about 142 MB a day on hot whatever the limits; the size holds down to that floor. +- Warning: 1 documents on hot carry no utf8Size, so their statements count as 0 bytes. The Receiver writes it when installed for the hot-tier run. + +| Service | Destination | Nodes | Sent a day | Kept a day | Limit per statement | Total | +|---|---|---|---|---|---|---| +| accounting | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2814 | +| ad | the frozen tier | 1 | 99 MB | 8 MB | 6855 | 20847 | +| aws-eks-nodeagent | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 53 | +| aws-node | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 255 | +| aws-vpc-cni-init | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 325 | +| cart | the frozen tier | 1 | 241 MB | 5 MB | 6855 | 14133 | +| coredns | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2051 | +| currency | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 76 | +| email | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 224 | +| flagd | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 723 | +| flagd-ui | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 127 | +| fluentd-10x | the frozen tier | 1 | 19 MB | 4 MB | 6855 | 11401 | +| fraud-detection | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 191 | +| frontend | the frozen tier | 1 | 58 MB | 12 MB | 6855 | 33639 | +| frontend-proxy | the frozen tier | 1 | 3 MB | 3 MB | 6855 | 8421 | +| grafana | the frozen tier | 1 | 45 MB | 39 MB | 6855 | 108935 | +| grafana-sc-alerts | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 559 | +| grafana-sc-dashboard | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 791 | +| grafana-sc-datasources | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 567 | +| image-provider | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1422 | +| init-config | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 470 | +| jaeger | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5747 | +| kafka | the frozen tier | 1 | 455 MB | 45 MB | 6855 | 125775 | +| kube-proxy | the frozen tier | 1 | 5 MB | 5 MB | 6855 | 13330 | +| load-generator | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 647 | +| metrics-server | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 2027 | +| opensearch | the frozen tier | 1 | 8 MB | 8 MB | 6855 | 22872 | +| opentelemetry-collector | the frozen tier | 1 | 1.9 GB | 47 MB | 6855 | 130368 | +| payment | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 220 | +| postgresql | the frozen tier | 1 | 1 MB | 1 MB | 6855 | 1985 | +| prometheus-server | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5773 | +| quote | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 35 | +| recommendation | the frozen tier | 1 | 65 MB | 3 MB | 6855 | 6992 | +| valkey-cart | the frozen tier | 1 | 6 MB | 6 MB | 6855 | 15981 | +| wait-for-kafka | the frozen tier | 1 | 2 MB | 2 MB | 6855 | 5332 | +| wait-for-valkey-cart | the frozen tier | 1 | 0 MB | 0 MB | 6855 | 415 | +| `*` (any other service) | the frozen tier | 1 | | 1 MB | 6855 | 2006 | + +Limits and totals are bytes per 4-minute window per node, counted the way the Receiver counts them (utf8Size). Error lines pass 50 over a limit per statement per node per window. + +[tenx-recur] actions: diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/run.json b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/run.json new file mode 100644 index 0000000..7df8109 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/run.json @@ -0,0 +1 @@ +{"ts":"2026-10-26T00:35:12.597Z","status":"applied","projected_savings_pct":0,"delta_patterns":0,"delta_pp":0,"message":"applied: Hot tier: 18 MB of 41 MB (0.0406 GB set in the policy) on 1 hot node; at these limits it settles at about 41 MB within 2 hours, with 2.7 GB a day of counted lines moved to the frozen tier.","history_path":"/var/folders/45/5yzkj5nn28g5p4qv4b_pg81m0000gn/T/log10x-recur-history.jsonl"} diff --git a/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/totals.csv b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/totals.csv new file mode 100644 index 0000000..3dfefe2 --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/budget-runs/20261026T003509Z/totals.csv @@ -0,0 +1,38 @@ +container,total +accounting,2814::budget run +ad,20847::budget run +aws-eks-nodeagent,53::budget run +aws-node,255::budget run +aws-vpc-cni-init,325::budget run +cart,14133::budget run +coredns,2051::budget run +currency,76::budget run +email,224::budget run +flagd,723::budget run +flagd-ui,127::budget run +fluentd-10x,11401::budget run +fraud-detection,191::budget run +frontend,33639::budget run +frontend-proxy,8421::budget run +grafana,108935::budget run +grafana-sc-alerts,559::budget run +grafana-sc-dashboard,791::budget run +grafana-sc-datasources,567::budget run +image-provider,1422::budget run +init-config,470::budget run +jaeger,5747::budget run +kafka,125775::budget run +kube-proxy,13330::budget run +load-generator,647::budget run +metrics-server,2027::budget run +opensearch,22872::budget run +opentelemetry-collector,130368::budget run +payment,220::budget run +postgresql,1985::budget run +prometheus-server,5773::budget run +quote,35::budget run +recommendation,6992::budget run +valkey-cart,15981::budget run +wait-for-kafka,5332::budget run +wait-for-valkey-cart,415::budget run +*,2006::budget run diff --git a/elastic-hot-tier-budget/results-e103-smoke/build.json b/elastic-hot-tier-budget/results-e103-smoke/build.json new file mode 100644 index 0000000..78639bb --- /dev/null +++ b/elastic-hot-tier-budget/results-e103-smoke/build.json @@ -0,0 +1,52 @@ +{ + "images": { + "docker.elastic.co/elasticsearch/elasticsearch:9.5.5": { + "id": "sha256:13b4a40bb095774f5fda635e45fd5677cc6a26565e42b24997b0c72b88e75984", + "repo_digests": [ + "docker.elastic.co/elasticsearch/elasticsearch@sha256:13b4a40bb095774f5fda635e45fd5677cc6a26565e42b24997b0c72b88e75984" + ], + "created": "2026-09-30T22:20:56.268968505Z" + }, + "fluent/fluent-bit:4.2": { + "id": "sha256:6806769c10acf11b41d14083b3101a24433b4ca113a1ab7a6b1a1b7cad86a7e8", + "repo_digests": [ + "fluent/fluent-bit@sha256:6806769c10acf11b41d14083b3101a24433b4ca113a1ab7a6b1a1b7cad86a7e8" + ], + "created": "2026-08-04T04:31:13.800466265Z" + }, + "local/edge-10x:e103": { + "id": "sha256:8f74b8bbec2ef115fb83eb365172872afa5aec2cea4ae5fd065b49c1d77fe361", + "repo_digests": [ + "local/edge-10x@sha256:8f74b8bbec2ef115fb83eb365172872afa5aec2cea4ae5fd065b49c1d77fe361" + ], + "created": "2026-10-25T23:56:14.606292327Z" + }, + "python:3.12-slim": { + "id": "sha256:a0f57064cbdcd6285fa45f51237ab0b35ea8ebaed06a1f5973e89e19dfb86704", + "repo_digests": [ + "python@sha256:a0f57064cbdcd6285fa45f51237ab0b35ea8ebaed06a1f5973e89e19dfb86704" + ], + "created": "2026-10-21T01:10:54.051521261Z" + }, + "alpine:latest": { + "id": "sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6", + "repo_digests": [ + "alpine@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6" + ], + "created": "2026-09-17T20:37:20.889221879Z" + } + }, + "log10x_mcp": { + "path": "/Users/talweiss/git/l1x-co/wt-mcp-main2", + "commit": "d6fa2b1129a4b780db3338b7f327186864ce0907", + "branch": "HEAD", + "describe": "d6fa2b1 Doctor reads the config generation from its own series; 1.30.84 (#297)", + "version": "1.30.84", + "dirty": false + }, + "benchmarks": { + "commit": "61ce4dfa98d4f3dc419fef67be583f3390dc68a7", + "branch": "bench/e103-hot-tier-smoke", + "rig_changes_uncommitted": [] + } +} \ No newline at end of file diff --git a/elastic-hot-tier-budget/results-e103-smoke/data/returned.jsonl.gz b/elastic-hot-tier-budget/results-e103-smoke/data/returned.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..73a974946fa44a6d6d81263be891261f88b077da GIT binary patch literal 3484256 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

6Dw9Wt0E)-3bSvrmTcuU^ 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%0Ax|3SV2_F@X6)-7gY_Ob$H?Mk;yJRY|QIK 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�NL@(pEsKO3=hp1CqW{b);i7kI{%sX8-^i+;iFR*d83dqs6JHeSO z&KR`OqC|@wC4Mg~`BD@0sBELLTo|aGL;Sk_DPtuhY-Pe!X=|#q<{eLM9Z51^OyA2$3AigPIQ9?^3^wQ zLha>&^0DToVSP(zEN!vDd>@+!Di_>isIiXWvF8~p;wMQjG5%X0$M}|h@QQaD-A(H5 z(4c_gR9?xv@|P>KH23?=Mxs~6Lu_IfZ_mPLpJ2TVt+0C}yw`q`MhCDd71f;~8 z2etG#hx)aW^W6GAV346_!FzNXPIezW~$gy^OaxVOThB#Q&ESj z%>(L^issbp6S-n*Nx&4BX>DmG;%)PPe+bicjJ<7bE<1DttObSc(}%;G8;~E1QT}o( zO4Uuh2pX8RX@e~-D8@e_d}mg(9<7a0es8zK>Hu}n)8HGvRkS-0DHkLk!u@Y z&u=zPSN5Kbp@7Djl|>Lu&lQVrWRrVfz2+B)THxUn9~?a#=dSL%V5l(5_xcHVjT}T3 z5Gssfa0M6&ymKmr;u>HojeWcvW6l4t!CV-B z>6--N7n_6PDjD zHmbheA>^6&okh@`*z?!oYi@YqirTTOVNA7d=&N4nL~RYtS=99wajT3ZrqgSUu;iCs z*HlY1Ht^5VgV%Ms=W1LjeEZ4Oe=bZEH#181myrD9&2zby_$klZeB~lY9^yIMvBx`^ zqOtv60qrSzk{BWfhc>x79tFa2xAB6FO(oHQ(f(ubEd5ayT;i%hFVe zT3b*^BQ(y9nXm8T%sVS@)gE3P!i#}S-x-Hr;0su9m0Jnb%*z}g#CykhJC_(7qsHSi$wT_zrMVa|-)B`QBT^#d%6ep7Hi^2tMqw z&Ns?HKX?VQM7*->-Np{#D(B+pR#rnWA(pKGw?ORNI20=$OVYnEfz8 z3-S3B-v@P>Pd$CG^gQzdUqm)EpYn07*>eJ(kKWU@n|kO~iN=m3@W;ginR z>=gU+jO5L^pW(KP{$4FqEh@hU`dJ`37>39bfiREgTQ?%^rdKd>a5cu(#yg1fZ5ATd z!tVtg)ac^(wv)i8nkX7+MUO5_gfk1QybW;s_3-=JKhN@PymO`CJ4hL!UgVd!>tzRr z8}n$_(5#3GA z2~POLbQ_8AG8lxV7`}W5mEXR*#>=Kfn=D|u82_Kn3#L3@h}?3#^lQ$2O;oN_2Ld2?t#_UlcfXG1Z3EmC>QTG~C2a~etn`)VW!hB1&+rn(s zZ8gsJA_axUNRXu)klC}DyZ2p-i-?MyLJ9u#?<*bU5dP%=ot^QSKeXGM-W)OS+E;8> z5Q|e&j;KCSW<9cxeD|_AN;krpX&_KE{cYe1Z~fLywW*_iKIt>o_K+JX`S6+Vw+C(% zQ|I7g(|r|^Yqn#*4EE10|JtVeuBO`FhE5czS>mMrX7EE6oLYc`r*@f^|n(^!++`AsT9AVC5BkeS3I3awA_=yNo zy8oHrhEx%%ECm~3(%(gw|MJn*nvMdRH(f#)c2^fc%Ezz3t3OA}vFitE z4CS_NW>U{92XRZV7eiFGo8l{AnS@|y|e$6;q2MVLV1E$zDAOLGlLBV-K zFnmBydq#k|;#&2WP&mlU+bay>C_>bHa@pzWUy$6gj=&ZZkwo3 zbgm$7n_(9niwOt2oa3cYD$v5!1OdClA~9CNK3f^8@56yquDZ{3=hHLbjYSs081;2U z_>V6oCo0=B(XQUQiI8mC>|fLIAn~61olWT(yKb4%Yw@1nCAY}|8&%gXPSdCVfmxwi zLj;E(j(jIv3he#_S8Z?F^D_9_o(gg1`%&)0I=l!nEZser0p~$7wi6m!vyz5^=#_dO z60#3(DcQ$Q_kh)kA(ZEAua>SrhON6Tqegq)mjLv14|D`Pyz;9(QrWGQs^FzO=Ev1N z$K$$*b0ON-KFb~#pqGtCk3Xc)(9X!A*(Zl5F07fc^BhF-b+qEkI^tN{v0pL8T2!-x zJ8fSartozuOrb?N4^8*mf~)zNJAVQ1+SZx=vZm`}vVF#ft@Y79W|U;=SO*>O!w@Re zdh}W_9K;NM?7ZQFQ2{+OnSvjmw}B{JO;LhS_li73TeV?%qC{<5bb+iws7eB0Ma;@s zzUnb}ysI{E{-YQeEZT`Fz^)?yh~6o(1I zV1Ac=nyQ{3QqT-FJFJpDZgSa>ZcnpeI+%l_HvrEPD~H6p+*RupNfH!jdlB_6aI4S$za>yKG!+E1yt>)* zQ?&8N^{wX>>n^>XIpqr{g%F-cr?^;CO3F_Z{f&Z@3WC{hqc3ibdYrNpyaMGD1UNVH zd-PCFJ#Yn}Xn+0cb^e;TIviz5mf4loqZ%Pr@aQWCQJ$mfe#f^&!iE@ZKbWG^9+`kq zJ;EHF*B)cF(`;7Mynpzo(=XH-OS{JkNdlYHh%;>zNTO&K{L3gjm=~RbTJTyqvqG3( zt=cYw(sUC2?QFF>UW2mOD~OYy=_|7ebIV%s>XPgt5K~~G&WmHoq~3KC_NHf-lFNA= z3y98H+VdgxF8*EnC4pP~xT^AYLe2L33b+rH97KgG{NHoo@^t$&Y+0Od9iWl3QHBOk z@Z-x}Rh)i=O@)VJKzgQQZxyd2L|#s!97l2A%J16Yk01p}A9> zD@25)cA>R1bl{r(cziWRj=tIPdv?K$59j^N2Zjoj*RFlth-3a>+UNJ2K6ArPx<4p~|3AmPo7` zG5@~+&OkB0^l_ru^&|Z>QT{BEev;_&N%CJt)4N9cu93b;G{0;9(@AuB%O&`o$K&xL z@)WdYa8S^bQW%hj%WFUYZXxn8SXbk{ggoMrSB^XgfN9?c6Xc<{2t62LS?d2SL63Uq zt%aU6!1gbVfW8NZv}dK7-?y0_7e12!sqlT=jb>zmg$$IYEiOUNd$?<%$4%X<*Fmpxi=%yp9u5(*a5MDe zU=O{u(4#e2ua(dvArhrEZA;Me9`0J`i8?Rb<&g6EXsABPr|e>UG=0<}&=urF3wbgA zG!~=&gYjC-K}HFYan?Z~11ZK?#yQL=6LALA?~+6kN(Adtnk6ZrTnZS+w3DPFR)|Yv z5$3Kxb5U|A4n^^{?WA{>-C0hFhVWP&uUq~E`DebPKXEYqhVPuk1BHcA_;Gj)ISbCl zAMbqlNm*(%=?y*xqllWO_@#QnZ$B=kN?YsLiLL6|9JJ}`H$@4JA1R<_KD(}E`^FsAYzgz(n$f935-#O zaH2RRNf3nHm=Xr5`u9Y_ER%#u2~phTxXAX?=P99wtfgW~{%`Tsi> zATK8`sBoSi9t{U&-}>xZUWqfQBbUBq1d8hu;I&MOZvR5rI8}iBZn^#*o}O?b$M?_C zdd?SAfBRDX5wlD&ewWdVV+PYsC&n;N1Ocf;hzbEIQ_B!aN?^*9wA;nB%aS4+EIw_K zCHU;~t*JwpWhf#T{J%i`7yPC1`}c7Wr>Qnnx7SzJ2zrCy|NHIn$;-Q^_Z|f^3#mo* z-~X*v+2qH0rv84#1trUCdc|mZ#i%!k<`E zL+~!?zkmB6anbg~&{opg_Ag$azI=V!h~=l3YQpZ=WcT7;7LC|_^y4{rd3xUe*Gapx zrq=xF{pWuky?piJ-u;u4`@c0}{{{?COk`gyyPGiln@MMII+XC`@DCRaFPk#_gU8SB z{(iJ}*$*!Iwl>eNR=D!@MK-iPH7$F-HS0%l2izM@j()qlzDv{1SYHA|XQs`T{ptN@ zFMq##dcVH;>sp+dEMDB2q6HQ=4Q$`c;*X!7-hZW5>djl6-<-w83(@)dBYg+^k6pAl zt|#ecwbV0OB`u`s($@NGC!A165P zrFWnR&h`JY*)Q)DN3iFYh-R0FrbkEW)JUJdp_z?QuI)L!Cl@@u_Zfr9$i3yN%v@fP zYBaO@Yrf>7{Nwfp+H`S0(j8g<4!XmBfA~#*Py&;Tspn5w(nX120t$#FQj3Il zNE{=|Q-b8KXtzsQ+UXL0^jS+-lu2x48S2n%;0>k^F84yA-6q`#Oh$hxGHr96WeVzD(W z8Df7}v=&R!a&vzRSo$_T8Vu9y=;PM`?L_*UIU4^MPqMQ}|5NsP`p*gogUM0Sh3b3g zuoPrerfDK#^<5~KfmmCY#h{ZWDUw7A*+nF!9o|*n7w%?QeWRT&+8VM9F-8K)1vRUQ ztUuHO{QldUXR&Y*SqxdmG)Uvf(s_*IEFLAFj=&{7sekYGK6ZQk>_~n3PDct#M218X zt0zi2Sr=w;)=~eZ0Hpw`e-VsvNive83C10wK2RKsP6ju4u7~eAqNORC=yIk%pv1I=sd{;Y9wmag+(k# z8Vd}0n(Pu^hS>Tx@%84Pmp@)Um1iI2Yv=GK?L9<(9bf&+EXC=4g0cQMlVCUqZcon6 zbDw`6&2h{q@1g^Di$yxyK>O#-@Jb zYizs{((8?b!SGu!x)|hkUmMd~3FY<1kvcV+ow}iIO>tXR?uDd3v+L}f$UI6Dt1LQo0_=UP^O$fN0(mN&?rS?a@2#~*(BaFGg}sXwz04SpYf{FuKK zhQ}q*yAMB=j#&Db^YyUIt}{ED0<*F>$$Jw!KKpw2{-e=vAJI$TpdBHy%sUYw1q4a} z8L_ovs{TyUSlKb2?ydYd>kRvfraPl})XT;}cQiaxrp+eF)T~pncw4u{zdimGkFxak z^qldntAl30DK~vQ-I&P_i!N^#>6;nQV2G_@Qh!xT5xshFHavSga4#oCqrvj+tI&WU zCYUn55gHP7iH6f`@aJiEcHUQ}m_s4A{AB*i+y5Q@Gae3ZP4N(`-)6Vf<l z2oxC&US(5IC`mJzOwkZLn7!)1_ToTYqgQI~*~!uL{F5c>7Z+pwuN3@0+7FDsDvvAf^s^utjkrf(DgF@$M&>kCvm||}CB0vz&(Qtn->Ls7%uY$Sx zzx5`cg1L_qbbDDpJr4ep`#S$AGyn9mkv=uLbdT~=XHL?3Ynz<$l1jf#to?iU-K5v~ z-c7J@(c027p)I$ze(PgvF|QduRfpdj4#vZNPrZ%vwn;-7wA1ljZ zOP@WrEJu33+19d&`m+ncI?LuA1Cn8SWm{d|e^33Q)U0{AzdmKg=JOK_mNrCZnjrLN z@Y%b^kM6$}uRptJX|~DhTTmeBMueUuopqM(4~L&G&X>$QU%*poulIwdO(nu){I$&b z)62|EpR0O(-n1!%I?VtALud!%`XG4v`~k?EUxe z9T!757+NoV<*QT55V5oR<vCs&x*jGWA9g z+%$NrJgVhIeo5}xK);{UJJbLD`Ir9$+8dK-9=g&~-`;)q=ckK*KT;Xy!L+;7W(J;KA-cSR zag&Cd3ejY>XpGH9>i2#h{PXT;(*M)B%^M8W8{SUP)72g^IvHcu&P9JF&AhRWlmD%2 zC)5l4DA3O^K93V+s5nt%JXT-zaX@Yb=fiaAR~Rk+Est=@L|2vP{B{E-))DbhDsco1cw{O;3>UEZM#bj6cpm77~RF?OXv z=hwLZIs0*x#G}ay+WtM0PtVzqiI?}+qD{TG8H-t`o6-*LB(ej9NHf`uA;nUG5J4ik z9nM*nbrN;^4$3+i>7{xK;xmKMNGnUZ{7123|1h1qMS*Sn%J$ z@CA5r`Tv7A`Cat3{biBP(gB4A9=>=n`@d*1H`snc(5wWEJ0U($PL zUxwe-&$hlHs}-lk8>}|7(`=IT9TBR3xD|AIlkpvKWW}VqmUo@ItFq&T`(kDk(C$F=xsk~K|rc$l7@U^$Y+qKU%E zM@=C`S{h@pW|y~5Cm)~OI~zZGwLX>WhA_qpgT-qw#udAq4F|)?aL`MFq^~~0aq#lR z$>Tq#KSUq1iEb}h2!YEJqv^5vc?)N(;R$L=*`nod0%&QgCl4O}`2ANr%3iMD;k_AK zm9&^yV=JL-^=g({r>Hr*qt?M7jr+qvre)k{a))6q!$MQd&eN2hMOWuV`ZR;3Oi5X^ zG;z|}Qh&aApZ)tN?vLEGRB`dM!BQtvKJ5*Z10DC(S5^GlogNk~AGXdMrfODPE_`jx zaq<4{6ZvG=?OwP@auQcsI9Z(j&@aL`NwV|F++|jBY8*_G^WsIL&(SZd={eEDInnf- zb%rvvR->hH4{Jl+`|{?uFJIBc#h3L-sW)IKjLQ;>iwq@>fe6)ySB6r~U66c=2Ol%N z3mstf<2X}yPsd?!5`R@B7KX(fH#;ku9Ue`OUS}l;;OdZ(>t?FIo|2Qd=T8Up{O;@Z z`;a$eCT{IWE|}@pIQgu1@CRuy&cElma}jiYXrCj1xX?&f=S9===6*%g`4O#Y$etDieT%R3sL*|mj8V?`eE3=p8zu$hjo;*+FZKVd^c`z`N-4Fn#*qbj;pAa?YJs#(>4qev>gC3`d`Xd&9RucQ^`O{r2l| zkX(#Lx<&>B&wf>6E{i|U{;JF|(g_&)r$U?QYeni>k-APayG*1n5Iy@fnw@R3qbV#? z+6Qtv*7VAbqfCbmvVqP38V)R@x}AT2{}ulG{@&^1^(LmW135@>N+_ZkArufqAYi&Q zUr@@rlJJfoUBWWd%_tO*r3ob&Q07l??iyV)@yY`iDGm}6+dUn8OMO*A-fI7^Gj*T8 zgTIz2AtACx0ba1to-jQ6Yho-2@(io#S>)?c`%R`m`AmVOE`S0;SA1Gj) zrh0k>Oc{hM)xv1*MA=Uar*G>!?Z z`6aj$o{CszF+^z`OG7~1}B^diD4=(!41?g2vg9- zI0h24n*#R&WUqmHg}G12%acD}KYx8A%q>@^5qNMficb&{%c4($Z$Vj+xz)$&pajH7 z>1!pa0Z$VQFqa?}3<-J(?kwqcFkleDRFYU^HziA!nR^-P%ivz%@!f+P0zeECjVLIa zv(gT9)8eqib#&8P6v9gArc!3z7%?JJBoY)$1QdEP?j*#7IK9J9IC*jmzA`Af#u|TLOVf=vE-clAwgL6k*C`M^e;5RDD2}2nom~ zy45G@>fyREWl5T-Tkj0r%Z$7(*uCsy-e|}~DMd>EfA-#mxosoq_x>uVoKuzLJt92! zi)#H;dA*L~yW?Bp#4gkT7|4t%QX#3>&erqY-yUAXi$DS-KnfJco3$kpBnH55dj8$h z)8px0N4F>yGXc8giIUrSl~!3->oDUe(*Uo*Is+@6pp0j+MshZllg5S`%HZ1b0B?qQmKkU{ zBQs@UF|)=f4elk0HN7civKS><=W*WXTn^B^oZI5*o~N6KqEzK8b;`sE!rSR?8WSxj zQ4}T2>LgYeE{(@DQA%Mpr@Mu*8Y{{)kCn($a#Jyrbt-(Nk9iYxQ;Iy@>*!XhOtC+p zTb(FHw~Gh@*;y<#&OnnSHda)*0`kDRNU5@VmSmz_XoaH$!xd|_$B5v%m`P*j;el>e zAtHGD=@ua=m1Uw%IXyvAZAG^cSh9RyHg=^P%kGgv;-D_edH|$kXSs@~L`{|aU=4EQw=u^Z`1ldk^layf=V*oY= zM=}M{5jE0M!%}JF++3v*Jcg@R%;1#78M~<@szufpZTHFqtDB&kaZmRex>ZO^MFjOJ zCMRy?%QkeU2~ByHWQG~V;S!`xa7Jt*d7?#GxXM6sb1LY}tE4iHjWL26xH>T8H%0fl zoT`JbGGK2%-7BjD zT%((-6GFC&cPlE8&1f7WBC(NDW>%ThB%EhNQ$1UnBL&G^R&1JD4f9KwOA~AgvN?F$1$2XT&fSbDU|ob6{>0jV-5?YsQR- znWVd=tDy2GL#yj--*URxjoB<$I;NF!p;IZ8Y7PGCr+T&-yL&TZh*-D-Zixy{VwS{4 z5XDSJ8IqI=mB9UqDX1o$WGZ2qL53kq(oB&gK^tt7y#-UasG_DmTBb@xp7zhw7Xx+* z6i{ofc2NsuI0kElIJiPIPI+q61a3(ZCka;EYNZJ>RI1cv`v@(K%CZ#4n&ZS^rFUz$ za6u(d=my8iSlM0wcEH#tn|y{R(UP3YSf?PQT1lsS9?y)|^aw!`Yhq?`A_-WiSdx@7 zt|ihMER?cRbMQPeo+986CpZ%(#^9rH^%Bq4?y$ypXlOJhb7q^%Hg$JVQ${Ou9rRkAMLF7O&v@l3w8 zIG8M%aL#lq?wo%XGxaq+!YHY2iY!aO9WYjdmv3N*q*e)wWdaW=)!OicFc^mvP7#YO zm@;V<&P--@tiB40^&YSKD!mzG{czcHc(VnXTxpqVm9@^g$=8_!IeyzpFg-d+5P$BGq2HzwpuVRhMV;TV}XraUDEd_{^gmp5)*P+o(f!Z6r@ks=5Y zKnV^(F<}~DBZ}d+`#A(VhsZ|mq z5dZKGOXJ<5RurnoM>|56-QxEKQCkYCBAW=U6Uu{06e4NKvn1=xS+mIz zoTo`fxKS~;M6y^*1+F7YaF%hRWCFH~fvPkX-UV+G$ygYfS%VdonMv_(;VO*SuO2bQ z?S@O=pc$K>bJ6d8{nip(B|^$n#;y44K>d9kvGH-ln#3xZ>LfLkX-Y+=V~U9jy2fya zTuQrPges{GrLi_H!VgxB3Swc1-EE+P6vgiG>fq|_294cZ8sS;rWTtCcB1xE#N-){# ziasG%gk2rLV}w#>MM`vvs7!@4gbS2qHsKN!K4)4mnsH8TLJZt9K`9qt#Ta5KX1hhJ zAZ`ym`B>4qxm?21Xlds{x{0Hh2|*H}5`~OY_=z^srb@-c;+RSrCnAMWk{VagBuzx7 zL~Ph@(^N@8)c%OkVkL)1dUI$El9uV%{&3K8`kpDKtgbe6<6i7`lhZDqo6mL!R? zStek(6qqoi6Da}6409y2gzYx7aCz-g3@L?jCgGoDI$R z0S;OTCpx=(B9?23S%wT@VAx>L)%r8e&S&AU@!JGvoW{~xjwR)Z zF$^wST9$&|Pg$ZRsCp3jv1SNihT&HPloH0>>#5qU)Tafp{B?O1w;ZcdB@h5BRzFrQ zQFRAvRq5Y z@l<4t;5bf*5@4%DViJ>)EaTuc(j<`<#fmBL8c~9z%_N2U;|!Urm}jxtEoeTFzXCLY zN=mN!K|8m@emfbo#`Q5kdLV z3IV7X#VHswA(=7~XQPXi*a~cACUzULphYS9_*i9_z$HWb`-JVBeERfx9c*rUlnks| zMor3MFmA*U4PIn|WrpDX87eGzq%mWdS_K}Y;&2-gwI(5n+4T@wl%jvUu*n+}XT72A zv=TVfCT?hyGE+KclBKOob23{6(z}3bupR4w`!@H1SR0`fxR;b>gr{)JtdSoDP_&uc@i%i8j(W#Y|rm5ZSq7YgXCnLuikrk!t{Q+^JcH%C~w{vKn^D}iS z672@jwEJ~%h1&Fh1g>4DI?G^GWJ!uad}VNlvNW+m5TrPlFs8cU6ika{GU1uAB2l31 z1mW3kWg06iS8=S9NEX*)oxHyEDv?clGD%L-#UPNd+if4*GsS>D*(F{wo+#wuYV zNtqNWvYC#p2J077w>Nvj5C<>RN(@3xz!A!A&7Qco(*)ds-2zrvtKwKg8M16bkE|cC zajmyjVul9ZYJs&;Y06T!=DYjl?5`PRO9z4&Bbk&+8j%_Jkqb_RaPfYTYKsM27&n}O zhmcSV*ecL`fTcl(D#Yb(g&8Z%fIV8&%BJ=21U1lFpX}wJ#S@)z82r-Kp!-Sn=OLRO zGSUB7aK^N;F+mokl)4gh*m9waMetgZXvUd>+rurGJU1hNjp1?P=AA4_^lmXL%7w+p znhOipcvG1DbqO8-Xfdvsq-tjHAL8#WC5Ai_x)yfZ6fJ{AJmd-}Pg)Sl|`LNuI`O24<|qhJ^fc z#n;ktRcq+(7PP`(*|A1uWm#{se$WP=+7}maP|LMmF?UU^?pYSgE5xpj(5||n-~zcV zL}C;3L?UeyqZRYP11$PYjqs?3V3<)=xnGP({>ki=!-;aQ6#Erf?~IV}ql+ zNv*jSwz4mOe)=-EB7F8v)qAsBxC%31j}tB(B2qHUUq4*)RWsoNV0=sAqFbHM=kaW5 z_(Ew-4Hs@ioTWSl&8}kv&ZpIx!JKNiaRf8B<*pRg#)-lp_-$-)rYKI7)_k`<U zo0O)L6%qT|>7YN~w}zeHP}2~jtmJxKbxLp!Vp+Qb4{0>zW{!Vz{k^L+R?!>}^I-gs4=_9(Bq+ zinX9fd11-B<3v%HEI6#aRjdg`Ubs4CC5oD;1r$x1N8p=R_wGMfM)2qUx8c{v+1qse z);WS3VK_&rVcKSy&7{c~BjE01VQ7p+#wbZ+&Y2{{v6vy31aDJmF~wBnAqcI^+b)NN zM3x}W!H0n*H$9%(^Imu_eLcPb@ZuZOKZDCi1Cs`Q``4u%4B_9=E-~q7XPQ6acDI*Y zc1$1C;MFENEKLMPa6Llnj3DM##9`-$Dr2}5@@f+u$j;;1w|Cs$XnNO}7_KS{0326@i;GX;n0BRWv&3=&QGasK_CubXCmuRzbu= zT&8Zd`;S(F$Xb%bE*)2 zIHCbWq@*QU2~mj=t=IcJKbY;EsGSUEqG%ZsTb0#+%j}RKC8mnpf4bUWhBUEK5UaFK zX$B5bY>8If)yK@hx0vnUEu`BOhQ!2$<`dCmJEV$AZXU;ACPRTsOasAx994oy8ir&X zrvx*Zse~hvk|fE5+Y+0{XtoJ_8k>X}3|Ef@hU;uDL>N3=KbVanDmj>~hNyTjbBWA@ zq<3NGN3^|TwSy52I4T;^j>0|TD1;|df+Kv2MI~e87EX{@DoZ#|h~x$dVq^y6S;`Eu z$;>@d22-P$lS1I`(*_$OT$FoS-Wa)wtCI1`_rG6svR|NM{kGm3Ro%rfkD^gC^WA*D zun8B2P6tfU zm-g^ea0&P75eOrl#G0|Br8C4@7-y)ZV{Kb*BZP#-LdByLi|d5Ue{nSa;>dk*H2&f( zB894`C>L3|HowBtxBq$lzH|TC%fH^eZ_d-_Aw{Bwr++U^9}VsK%BK%*RBAyAuY39@ z)BUdDc>Vg(FK^VF7mr_@1bwwIkI|q>H>RY4fH*Ld=ER-*+R@&S) zi@}!)&F{)$lwoFH7DE;!knhA|H1+8(Ol%#+(=SNCJ*M$OEEGf7*?2(>JY&Mjju+yA zCci&>|Nf`n=f(?igTsX`6qu_L(r%x@kZ3OkqXaVhG8npG3h{UhhNwv_6dDY-Kar-W ztieDp-#!uV#DjOJAp*0oxaRQ)OtF+vxHF4Uf|)&8jKVsE$7C@WB@MI~xe|llpus3C z1$Q(Oqb_6)%3$1tPtw$ATD zvY{4(lD#B0Y-%xHvzM=bd;9$Dyv4|0I=3f-QB+*$Xv8BR!}pO1)hL7EGofZrzZUUW zx50Sv^zr=%uV3Dm4Vl^2s&Jm_cnk)kdzq(dkipP?o@(~=MI#kPo=-w=&|qjkPj!XN z;_iJ%VKDqW)$Hl>V{=HgpQoCw`{Mh^n%>Wo#RwIJ8g>z!Z0eKUOGfnGo@|lDUj1Y# zx@8hiqkW_z5yDi;`P#Kng+AfU%|K#=3(Wi)iMKs64K)Uu?!(NNL1teD0~e(%tRCcV znZZyYX8Q;t5oo(iF{zZhc!Tp)7!~Eau9>I0WflXNQTuQT%P_Mqi&2!idQ29B>N;YG zg%*RyR6sK;t&g}#iBY%-#?eR&6*9UHf1?aC`!X0sn+NQ~U^MmV%R0i&2le!CLSQ!X z>FZG4q7*lbix$1@B-YT-C#%^$WZ=G@Y~g~oV~HYhw5Q}n;pR$N#STS0{OXFM9cC{pLLcXPm~;T8<^< zi7`xbCM`={g;Dl3-45ITv1gDM0r;SFZjV7m!u1@QAEQ<0@yE&ss z740KSb$&Hn$0*yH(f5zv{QdPg>c5D8X%M44L<`Ha)-g&>1X5E*Ur(OtLks6I@Vo$} zyZB>pzi-XZ?J3o@UxFvEOg5aMn6*20_8VIMqp5CP{epwoCI$>q@Wlq7%-=TX+l!9* z=IUh*gN`+WVL%i@LHrGFVjjEgb4TvQW!z~GKG}YFt;PAsPA?#W3y4M+Fyq%!;I-N%n#1n4uc8GuP>7X@W?JZoo~UHk$Ei*Z+RRi=gfz3z6sHnC1YBaugMv< zqN`|1kmc{jQjIQo-#oC79)Eh+QVpU@gou_L&M7~^GrFGkKwCZSofQn>Cqdfo-@P+D zzqm7ML~FcD->cq8@Huk|F9ZX7c5b^1!@8hu2*=|gd<>f#rKhLOCu{t*BO~X=*2&j8 z8#WoF+g&#_kI9;T)fNb8Tr}FU{35LmA+EF)~N`k@``X%mEa0J68lnwdZY+RLlvPeiVz=>A_RnVNvC2FpQ}>7zA;2t1d6-F!F~Vhd zZ-pWRx{6HYP88wej_JNj-=g26w~eApv9ffr6ZqJauD9KG*0$-^n($FK>077Q!1j$q z;Sj!MI;anOfg&VGFRlCWiqEsLO@U9$X~bDW@@bnp(O4$B6HN#0VK0J{%<#K9!-T%s zmu~}_C<0CFLN_)QG>ta^O`*MkCh)<7CX2#>I|1$2&ZGC}mp>o1ADlG{G?Ba0;R?{m z1hoIyj-4{H1ks&5-0ob9p9n!mprqq(D(`y0Q-3{nUh~PCG%bQwT{Wbndola!t+*Qg7mp0qCid3M>P*a>i@O2tklT+t=2CKjjNP3_kTfQ>%CJH)OcCvcV<;H@ZD zw<3G98gG9Q^yK2(yN7?iZc?B{mz}*`!P~HXZY$H~zGTP5-4JSp6)VLqT+DmVergl? z(C9DgGlln#8ZR3!$wO@xpK}jjCZo3JZu%8d>`GHNbq{}PckFuZuHtp0M$eR)BXNwK zYjYly`8dv>c`G1`%4th}G|mD5S#F+U3CNv03mTz=cNU7OweH4QxcuG7Cw=+q?`I9O ze0meFblLJPM1cpRP0+7idNF#K_qyqWi(c~Shw-z$D}*=+tb64y{xNqnotnO>K^d&K zV+(QIf!p7FiqYsS*GJQ<@7)TXB2SYXla<1vRC3e=9=10tMfKrZsX|xactRRFBm{2& zny4?Np>JDAqo|VTF@-dME4qoyTIQ;bkcPhHA&tTvd5K1_!_acDo&b!X%*84#4)jHPr!N zXoHB^HQp*a0FJg>>i}R>VNP><)S5bEGP=Q>W}QPOzhy%vMny4sP}arF zZXb|~8<*WMko-7-EU4GD8z7q+#N}v%bfIfNZV|*~?0|!~7*z=3ZVyj0i!T5?s%#LK zpJ0OaRD1#Cc7yA2If#n9&s{Lo%<2okkS zSaMC_;c@sMb?^7j>|prHCcXaX065?I#r#nc{kX}BiRr~mWx`;zMq=2zzIsD zXm%ZuyM$=D@%5C7DDbA(nspW1Bmc{rukXlXeI^prVB|^Jnk3IAOqXH4+e_`Ek#&D& z`kzOf7leEq!_$z@C`L32Ho_UMta=+d$#6<*@WT{W#<-9_2JHcy^vmRBj*x&GrGE^1 zofI_7@RRAnU-m<{4-cR_`r03a8#Jys?}OP6pSU0At}`F^(RW7fJK?XbazqPFFyDoq zc=Pr3lPBkxzI)Ov6RbCxTfQn?Qqgf*Ho%kUWWI$JqMU_QU_BKsvas$bu71pO#{O?P z13QUhZf-^^cxp%%OwzCwTSnbZ-Jr{r-(H4xkGetN0^Oi+N!=h>8QlO!NqWn4L(#S^ zN2D8ch!)Zqi*y6si*5jQyrpgs42I!c-Jnoobwg2!(4FXpW}09fVzj~Xfcna1lsCby za7KX%W+hFq0=G;SnqW9eirZy^RgvmADie%}+`t60{g_~Zw=}_ua>?^eFm0*{Rz;HF zh+H?|aii*hHSMghnd_!YT3F0VxNhz!fe+4gQ$@Prh+H>-R&V0Ei5t)jR2S(6S%zw` zrHB>khVfBS|9FyrE{#f_3u}Q2deG=7uE;IZCeooMf2gjB8?*VqESGJ zZ=+FM*PzJ7k@GYPYpO=kMVk4jGzw+gtoGffMvE3d7(yuqXb)J%_T2+E(Vn7 z!gEb#Uk*$U>4G|IoaT2B9KsI^9mJ%0z2nWRd-oqKb&o%vN9ljw{n|5fecGDfMi|af z3jM-nna!lh7$YLnSQr{(kugfrm_wf-L=(a@WHT1qR9Z|iRe9Y5TA9~3Sg3UF%H-=C zG2@^W^oABp(|Iqvm%bj~0C@3vuiF|rMqH}5NrS%q>k=4&e-qpO+omVMMc+afa($t1 zx@qqm-Wpu=x&s>q!@fx@T=rdL6;ZKO%4$Wxyrz`O1ZkRBfnqQX!QcYSAsnb;LRCUz zq?lp}&L&@xblAjawZ}TOCas9gW&F zI`cAv7iKV+$8YqJEB;*Dixyzz?^|`t_~W7Ax&GsI{`8LdLz-AAh*esrG((ifmT1Lw zYH%hpe#IX=nG}X55|fk)oruHaudp8AYW_wW=gj!a`tYo6HwiDa>sDh8zhoj&74$wUeRek(T?-nCpK84DvbYp|j+ zGbzpk@v6CbIFeA3`8;zu#qmME-|L?Sn1VET^WfFuCQAbRmgS0`n%=)4vOSz@C-(Tp90?{Mvi#%itp+(;peP7&p zUsTK65%|71-kzHvKQ8*dxYxd@iSLWKJ5i5aEZ-M>U)*0`T;6JNgTA;FP(JIM%yi3! zlvCOMoc@!%?LS-}QWiW$C}mcpM5l<#R7gX(Kv`xJE{U<6X~Ag5IkgEfRA50V7tj$I zVku^M-Ei8{yk1B{%yL&G!{2ANf46&PI<`Ly2hfdeKOEiee$c<{*yysI-c9X5s&1!i zv>pz!z%Bc6OQC|{-C5w{%{cIZQ0QV4OfW)z4@S4@t_x-c=YzAmAHI7HCvfDBPB$1& zCc>i&y1k)`m-at=2YutRJG_f?S(|)38h?B|r3N35rXP<+A1(rBaZ`3#7~EPBTqPl2 zs$tu^u-$<*{p3?gUc`&%ok!?z^UJ&SW}7CI7?G;jrWR~AVH`_D5XLH@ETs|)31U!W zJi(I2aVnCGDx+9x6vZ;lor0KaYz{IMg_;&EVt3CR%Tu_4REm#(jOHOe{?QA2VH^JU zvU7RX?!L4ALA%#|{l(gg`@LQto}XI?_A&Tl)&RG<^S3~dK2*|7humAHk< z$#^MT8AM)Q{`znA`SZIt`?401SR0`f4A_*y0G~1@td`IfIW}3Wt>!XKbxd&zzo(RA zk-^BH=+sI})6|kxh~%|=MQolF#75stWAh=w^!E=#cgH^rVSwqklfj4Ke?NTJx8qyx zMlASsau36H7oJkr{gAqMK75BkresQxmWmB-F^c1s(ky9dH#zDe!PuG)-<<@ruW(m1 z{;Ugb!lks_)%M%*;$ahB#z!L1E<8jZ;Cg4D3zOdYMXw7t=BhQ&Coj*&-*f$-&+YEy zF#B~hzV#Q69JJ56rZYa`d~z#B2TbopaP=xEhLicDP6Hy`3vPH0E_&_maP%U@`2+Rj zMsGga}w zOLutkQ2q25`sJs~-uilT4d@Q}tL^f-19+WR-Qj8P%=ZO&&E+I5b%gOt0R74MeK%na z-o!fl@9ySSxEDn7_@1Qy0pXrsk~R-_Er`dxJnlFL_Z9knYurgQa6c4r&s~J89PR`T zRbJdz68Ct8p4ndA^MdHGx9``0$0gN02|<5)`(Dky^P25@QSip&zKpxbEoh#HJD1Ai z-YhvIn}PeG#BKnM{6(>OxC^X&>}H$T4OxoaxTPxBV>eXRAG=Y_h}|5Hy2m)Tyw~;a zK%FDt)%}L*o-C+)QM`AH3NV_xx(mdAKXg zy?L(`yjkJOZg1X2VeH16_a)v{$=D4IwU*wzS94}b&E~x!v6}-j@A<`YuH()^gni;o z#n^o9=DkAVjXcWW4Z$U+UV(Sw6L0Fsx*R9sEXQti?V+3H6y!~^F6-o6K^)^3>udU?NGNP4D+6DHBVR7>gj4!q2A4LYMs)!lMpdKQB`e; zAg+6+N}~#kro4SG03K6c;Hjd0ueY9=+Yh%9xZg_qPMDvmYE~kGMum%}d?Lcuyo2xK z&3lsy-e^=9s`L|8OSrR=p-K`8u6^ico6ya2>_*AFnX3A0)oWA~$y`(L=18qSFKzuL z^Q)#Bl~u1%Lsm^45bh<56$9>?`&ebeaQ9i4o8qoZiX9pv<_jWJj8(2kLaX4+HYDrv zP=FU9Lgnh2Q3k;K`h68wP1O!OZb;tcp$HlPo|F_cZleZYuDIedlA43_xFM6T2ZVdc zta_lxSLbe;e#aFGnjNW}(IxYUc__Fq^3kkC;2Qfp;thGnB{$arh?M8OBJXvV-`2Px zdBg|Ads+1^LL!joy;6Lpes8rQMGp>$_mbu2fp;eSx~Pgp%j#YzqH#k4@Q35CmMu6B zz;osO)n+Bv;D&_X4+wWvQqRZ``+D=uDte%a558}RJEtX+XJn{+$>D}sch(Tx4@bRo zS#H%U!>(AXSMSY=MzX?%Pu^Qy5~aI<()3B1gSk7$r>`wTe~~U8xp=bAp2gjC?%uNH@tmsR!Ed9N_FdZgxEms{oshZ5~$kqukcDhg*- zy?LMKU4{skj75r23ZFOGtf?l^5cPgQxR>0^8*tasZwS&XH6tpl;XXz+1Gw{&c{6b6 z+@e;mW|~n`QZz)qA4*<4P+WFuRfc?SS*y>B-+p&Xf^*X1`HBJ_6|&-Gh21TW)cWhv zok3~82(X&BIK9afE7fMc4 zabNJDhDc_uTi0V$WwVgulsc+pK^wpwV_(3j+Po~Od65VJ-;gzchog1MrV#`1k}$7z z4yeKhbcZ5WcTI(lBenm$Ts30o4jTJdX2ram+I?MIxJc03|7GAy3LY9#!oB^k!Pm{3 z$XZeBri$$^T0jWB&)fd_uAos#+s{Hw{MHNA;`;TQ{t8=39Vzc6Q|{pwapJ@J6_=RQ zJaLOrm16YA8Oz)Nc#VB5bAwps&UbSDp;b z%0t&RErHj5*Xw*yOR{zVSc~PEbTcP{tKNq>@a(o>9~6@aomML0lvnXg12dP9I@(Qf zjgU@rMGZIy-gg4A7Qg_A8bUtYM}+$hiLI^LFq>|7U6Jm3u}&Jj9dBpy>9=xH!F2wv zN0!Z;GM!w;FVDaO2usO{O4_N$a$PN|qAXc&nH$&*0Ryx4GLy7L_uP_wsLG;JX=2&X zDbKS*^2Bn}1rnvX2`WY0T6rI|gW}$VhbHHE8<-vT!SAGjw|SXz;Y<224h9Di?*mh% z4d>C3NT@ikv>*9lyC7GB4)vs035f_3=P}aRrZWt8Q+RPo?!Z%3hp|wkk{^Jn6k^Hv zx5w+S7}5T?aLi?2>5l=)wX|rNicguqWR4rST{neAtgD6vEXlQ;@I=dTr)HepWe5$w#9?DuG{KZ;!hy*xf_RIg+`H%k7P^A5J6YI~jA-qv zFkYYi+LMEc z4yY@ZAprad^V0Lu9Y&>zgkSuvN<>bo%(F#o?TT1;wrk!aoX)wI<> zyLi{u50x#;p-$4Hk6-r)JB(7V<@^O3%X}q8W@lN+gF)+n3Q19Jxh+V>dI{qJzNZeg z#VhAK-IlAqEH@zn9&)K~AjCI}$4xl*4n?55xY{PmLF61)g>xapEsm#?o{f+@59?2G z@zp=!I%rbWX@%+Dx8N4x)+%78ly^G&w%~r2nJJIj6{xRh^`56z-ph23=P^Ilm*ej- zDoDDjFkm#?v~Ynv1y58Fp#WM6n(6#0gjN@rZ5N@pxduCxUy4`&0Up2@x{l>e7Q7)u z*e>E2_v3$V`ZTFb8uJVsN+wzj!0*#$%&hoV{na92F(9@v{i!cA=h1iz*@QF%36mB( ze1N84&epwqQaHv^i|9Nfh@{~$h@{0Xou(VbxRotojS7wzJa}pc9kI;ZQ@8!5`d8Sq zgnRO#mxj#ui{~KuMYrL`X;I9pjD4fT@t)*T4k55CmhS6PgDEQ!;k&=&fJPd%87RAB z$H&d^H^hODx;8b|pPNRSo{`8h@U8+wTdzzm&?<~g;F~{~g_IT<&gH#z52;!lG02o{ zR4{g`66M*-Q`9t?TdM17r%=;ehxzDFC+B`WcZ#N&Zgn!X(*gx@_u^bMpY)!vmTGmV z77oBx@+O9>#$0k?j;YsR9WPZ`$e6u}#s|7e5PsxyXxZUZj`Y-89SXf(T01ZYwp|~$ zND$UqWQ&E7hh4AXCkj9I#f5rkr6}Ch$CkAIIg+9cqk_tbE0K;219}7;E(=%9^Nl12T`9 znJY|%%LKQ{eBjw{Xq!W6bjO;oR;;o#i!Z8crk)#Eb|2JNA$3?dW2mQ3srGmLm!)1v zmw|KZ%cDkO{zV^o!-t804rIsMn!NLhPewDZ_F}do)AbVV!_PI`F#xHA_Meeusggpr z>x?N9ml@nJ!<;TQ2It^9zF(*p4y#^fB}TO>Sz0xLb)ZemZF|P1< zNtq1rYS|S|@Zz`6&k@}PhpO2iS70wOGpa+`NwuFnHkU_wSmwElD)|AAwUL;P{!avA}j=FaBB=$+$w5DP58L~>%^H|rDs>+bD?D|*Rj${AtGOG;@7wmHIn0H$98 zr>}5N+c<4hy%yn`I`vT9AeJgaqd+$47ws*xo`s$6s1ep)URsKOK7J;dyD$gx1|^hl zM!<lrKXTi9_?)V}H19u}oik{xFi7tD4jpny6xgRZ$}7i1kE4QJQ_MF+`-g9W))S zVHA2ni=6v}HFF_l#_2$4N5R*<|=IQ?TI`FR7+HzF??f2|C#t39AegDt1}*B$y0|@Kel9Wpub@dNH!lDaAUWw(KrbCcUr6 z$Cq`pWp|(d7VXKiu-|$K&bfq}8RL$Ic)sI^JJ zgYj1}_UYT|MT_uA$yyZW)&$l7#jn6gSXT$}KgrvCKMyDS^@zK?KH0SDrlZVm0H4#< z#6rGrb*N6*v^V)hT7NRI7aTL^D&=z&fQPrUVIIp^*$IswhcXP>gxat_M#QqzG|$D_eaM~W^Q@A{i_%Z-d#PWe(;6kRCNc`O+I!aD9 ze}@Wnybv}-a6mMx5d9dwC#M{s=Rh~Vvg-pI-b^}fp>Z$E6JmUA9e&ky;M{oGARh6q zQ|p1F()Ia54^aK9yMXj0`F1ym@j=^#gH}#40E8o=KQ%k=+w*wURE?OQ$Vp+D+w}`1 z2CinS$E#}oh_FfnPw&7BInkizFXeGaH?AKF+lCk>G~r=tGW#e*gS@{6U`DMK5`Np? zq)6Vuc-@_CeLyd>Q-8dV-zA^g`chk>Vr;Wc3fd~+` zbm&cOqHnWMTeuX9R~5@w6}z-y{~s1knuYy!BV$a-OF%TCYD^*C7&UL;{x2os>f1IG z?<&*8&i0ZgBd*9mz^2qb#vO&Jq!on1gmD6?Wa%$h_0|-_3g@`eKPFJP!3>gYVsQ|M zcy$VFY8AYCE3g4TI&2fbZkG+esTXKaZQJi!bhql$j@;et(*5Nx=yL*%!MB(sb>oG zzd^)_2p04fj{=-332Dn@3nqKwGGffvG8bLgv7|3&<1;=ZB4HQwtZK7q|E~3$sI9nA zE-*I0#v?mxHZNv@TF*AunHqIw?%Jt7SSnW~w4WmkEHjrimHCP-CS9sM zl=lg|s#cx}saDp*UTsLf1xvnFKArGs-sw6NBlU?0zZaP-PViL&mrXV`oy2!Oz=?Tr zlqIe7n*jIfCP}@^4s5K$TL;rnR}~v2sp0l(&l(#Nv&WkLCc28z!^4Ta2xPieX!@P1 zkm?`H%y(7ITLwG7-KivRUuvcseHHIhXDc#wsOFm20bd&>J52J2} zE#Aigd9unhvD-p93g%o8ww+pYvwMuvHpoT70?k@+!`|h;4#N;3nua><>M5e%&;VsQ zJ#!eYgo=Ciwkgg`8Ey|POnXz3z;e#zug6BY#uH}xmrdl`QaUN2Wlr3kgF6%k6c_+J zadPb}4I@c#Qz_@xj*Kg>APsa2^C31})8R-%?jU%%>xLW{gD`wN!Q>33p}gq5hAR=m z{V>$M#;_Pxxk<0?TkYZk&41IQ2H6G3tb#R{$XeYU$wc(SMsRPfkKE8$;;RZ1o|0Rp zC*#9}K>j8rqSZS8FuV2@2S1R@M>Ey&QQZ_)0O%kP#;+57x64bt{;KP-{N}}8uh8qM znG$^T@PP)XqX1wKXm(50blHyPsF96v(aH?-(ELZ`GUn&k+BYTY1+g}pXQ_4nz+g`6DiUM zp9CUzs!AO&R(Zl1x*!==dB};*Z-54i(a)UT_N|^ry80x_B@4ziW=Zp~w_J@$_nZCad+{)`mU`0({E~5PpL)sYm~tQ=&SvU1 z=QlQMwMy3&ct$2(fq1$7@#5a`Eq$24+v448LpzV-DExUdYC%YyJivS8)r45~W^8e9 z%U=jHsGj$i$@F9-yBK)z^Qm23H$sX`PHkC6>HQYoe{}#G-J~=fKm9M7v==LLeJgF2xjt@9F0KS7)_?|n>%1bxm zpH#+t>gHt+={N5$fi=Psj#V`Ctg>F)*TMMgEWu&n%0jqj)V>gIY4?eJ(P4?wg|i8L zxkgUhUKx|xguXRy1)RZwAuO}7J%|lTo7<8!TNNb9gy57D{Z^pdvs3GCvB&J`{ClA*pG(}_6Yzc}etqALUXtg#X7^VZD@oBJ)2N_C5YM3G z9_LnIjqPI&YpK1iI>Zy_0F9o&t0%Pv$1oQK<$&+LAQ{kIXFS5b158)PWG>!^!CQ%Kp3$%wPoa-7n~~`Ovts#D?r2Wxt)y zemfw}8W*@G?*zX|jt}qi|37qR^!d~~J+~jhW#8$GTasV*{`K}rO??*DeeirxyRZ8` z=jii?ph~4;($3Q6v0~1lFrpwJ!X^)>Pc`VX?`N$2!J(_kNq|2IL8!&3@37&vHuqs7 zkjK@<$Jn`ITkl>MU?W^74hBCNY9fxZaTPkzbFp%Qh2m`lFKx@Ln)Tow3DEtTNVO(F zxYCt=`A#EBq7s6I@kJD2v#7)M7c&ES3gGh$;K=BS<>TG#>D@T({YN=A;InK`fIR`C zQoA}C<7)@|v(NiT1+&BXr^ETPf5ZJWGL%HdNxRP9aLZore34f7dvevkv0(8d3Dwpv z?UNMbAWYFk2mZydE!XJ&-1y>rf93W}ubTd~Qf|7~pf5JE5Oi41exAyVOeIu9xLh#km%zDCB@JSRc0QB6$!wL`)8G>75i$M`F&E{ z3BwGM!BUO>1e*b z*^^03u@iw;$Q(*L%4{}Khl4K_1a!Ue9wy~qgyEI4M?$_w*CfoO{D+UCv3<5c#l$O_ z6$P~@Y^e90U!7}u5}SngJ+cQfi+IPS3DqsMGRF~iwO4%SPo?i`IVV{4{XKpwDtGEc z_N528o%pv#oXSloA0P5-jij{=@g0Wb=npH1t`0Vb)yN*(>|VR^rc)vWaa`j^6Xv8R zaRJjnU`+nsUVUw?qHa0nC=t?HtmdZ@859lp2mAmn6jS&ljLWT z5xrmEIS27h9Bz7zqBt(hv*6?s)zzGeGf+_WHb1iUgnT|9P1yRT?6x~mT7-kI`f(C| znA$?^Q~miaf*5QJ1mqPn$kIydpo~-_Oa!^z1EKP{$=SE{Lr}^GJ;1YNA6u<%um6iL zw)MVc?!_&xZAdbbbT>qp&yf5l?IxkMOc8eoY&ebd4{orY&LPeJ;lL*%)>|#yHEe9Q zh?nEi={xBAC4K4- zh*>^rU5ixvVx_^yd)4ih^cuVoT*ELi?#p>zk3RMnI)0{%&v>EdDWK<>qmw1C@e7Ku z^ZxU2at{7|il8+UWTHS4et3+pmM^`0?-kO&Z0m}@2I5eY3C$JRWdkXZj{cMU$qb`_8O-P#sM9H`bAJL^!+ zu5CT)FTmHlnXA<@J6`8c2!%s?#`scCSn0T{opEwh4EQ^gSUMAuL-AJjYoL5 zSDbg=It}dj=&6WhG`{>Bl*uT|;y|9PDqL2s174*i0B@X(8FRq5YX6s=k2d3>p$6G$ zKv^UYph}~8)I7g@KB{Jt?@~1e3#g=A_04qpz8_sxPb++hy-Np@P?DOqT3S|%zV^NyR0dDd9OK>Dh=?0>sr}~*HWHs z#wNU*G?_#GUr>8F)NVP}F*#qSUu+|RPEUlME9h*2&MY>5tBcsY3y&kOg&Mns;tR`L z*^l*}33w_JoGJO*?#MJ0eXIihiG+nxSnSP>VvOy#RZ8xC!LlEUO;M=k#rI)61D8zSy?IVpgWS;FU5GR z9m%mTg#tw9e|WBh?@+M4S4}bJ+CCm?`BTAvM}L9$wI%;OaVeon#2)kri6^d3#BZKA zQV^=sLeuR+)cLdf{iWn%r$V8?Afr8U4sNdK>`JJ~s5pi}!HGJ$nQy$GGA=CYyX5e; z^461I@u$Z{*HJu&xh6zqn}vkrm*L~0mc7c!>lvZlLn*q6yk_zjf4i09Gek?CNl?mu z7^6K03(uvEMYk%5)&0vRsS75bfBgoCt(fjb7)66c$A{QVe7Nlu(dSE>WG+@ygO|C| zR`8{xRx0NcB_9=_=oh_|u9m`51D?fG*2eG%^C6M0$}A~LkIFgJTi-x?dKj2-|`VZ&7FOQ(4FdctZ#eC?K5_=4_Gj? zi3E)h2Sgo^j7VErF=CR8d^cE(zFfDGdR?z?8uc>7x%d#@t5UmyxUYdTN6M3RBZ!VV zZC-cslD%FH-mR_z-1+_s;^xj=>nat)t>7|-kKMSjaYK&~H)|El(DlAjy~b!wJ4n%% zP3wl;f^##rt}5zlo?J{2^SCI{mK~FtT&UhDgHoFZbt%`8)xgORpi+wut3xkx?@)2! zAhd2?2JT9!5jD1`t-#VrVe!zG7S&Gf#Bmtek_N=Dan=Sv)u9|5p}(U#j39kCaGuL| z0KwVR-&rUTg!bFygw81eoZ9n%R5(Ft5ve(IgIpx>ft3AbIaA;Pk+DIs?Htl_2JUAH z{T)*_pEwb`XB2Aw1n+7IRR8BGNJ*aiBk*u#pshjRB-cOqK*VC#IFS6-@Un_{LA=PJ z^>MS{ko-EFk-jUWSVe-@2>b(tKU1C7Ew_~QgT^#(g3^QqRN8|y9aokjfh4Oy^_~HD zpG5LwoM=(M1li~#RZ?TIUPn&F+iW7O|9u|4kH-pGMmA`H!%C>%>;YU*c-9in$Iy;I zv86sBrvfo@eq*d)GglU4P7YJ56{?bNOy*@grc}|arbXcaEx;U)X1GierS7>|JX3a8Zyj1FqyZ0fi1GK4XRa-hd1i& zWV#h}?VW*t98aD~J{TQumZh8T6IQNj(cBDT7eDG>q)OvI?samXYdn;$DiGgj*8d?F zn9BJ@$_f5vXgE(J01I_}0YGEe`9sKtBls_z4JyCSn53-~g<`T}+5Yrq=ECe{60hs) z1d?&}ZU|(TpQFqs9tvaRu(%JWC|C`Q6&sEEKlI2AB-*h%R2~$eHA5jZ9 z(YBZO$H6F1(Nz}v1Vp*4>ST;Z@Qn#Le{9SPmP^BP^-LdYCC__wRddaLKE*4GJl^}Z z1C$FHCl^;frV}_Oq=IOZDSn7n3I4t63_zYMf{p?c23kRpn^{MkyN6Ki)ddz>0cFbA za!GqzaJNSNsO>xVgzD3kDz^l1Jf}VcZ7MwhhDDhj3gkGkD>*@$MWCelSND3yEFY2!Spo0~{E$Y2;W z6BQljk?62ga?o0X1%nMlx~oQZonyd`HY_IELErGZJe89Z=|Rm zuds0cl#8J2MxT70NgoxDu!+g(_Qh%A`!s-=HoG=>-bUVjxO@i2jRV;I^r*R*tz36e zoi~w7J&*fc)p3$&e`wNiwhYolX-Tzz6lIc#mm2&x@R-c@X@$%PU6p^x*ti{qjU4!w z#ZQo55G^R>7RB2yJky&|#^V^flW`-le5ru5iyz;2`XTW9o;*^$9+QXnj_1wDkGBd- z-hJ{61)OfaPSoD#!g-MFh;8K8d`3>6OJB#gsP=TN9l4|@$>xtwGJsnmy*d*BneTqL zhPd-HwR)Sk6SU=c*vP>i`vC5V%R62jnZJXRU^`Uo02;f9&*<}vD@*?E+0~>Llpb?E4IA>z(tFEn%o4Fp(Jr8$lasqYwY)#y8K=^a_CDy@qna{Q8MqT2v(~PXP z1oyssf;%P!&J>gFX`PZqJ3(>R!nCi;SRV{3wjwXiL0>P9K^5n|k!&};JJGra~M;!bmt}3x^rhZ9skPC;E9D9pwoq}C87UPBVsce+H zsihE7Uzy|s#qJQ#E&9WylQs8k51U5aE##kFY??q2E{2(DJN>Y7tnyg(eDK4LbyR)S zWW(>x>w42H&N@c2DM3QqPL2#$FIH8FG+G90vSUuA&@Wo`JS473?=Oz0wVpjynN4NA zcKD{{n=lX;?T{qw8##5iRoyypD0QvA40k(j$XMB>!3glQ-Yy9RLd7oqrBn(o)NC*u8j89P0@T!kJZ(ZlxIVN}Khwrn8Lqn3lX&Di?w!Q`niS$CG&CoVZC!;R2y(ElgP|-@}%oL)jNYbR2^@t`u@SG zILZ2ffqAsh?CX=|YlXR%VdSOT4Mh4obDF9Ro6&2*`Z`h@9WYPr$OcpvbIxbuyG@26Er{f%h{iO8-CEn3eO#u+wEc~FMW%xMgT&?sko+u_&2JZsQ`6Rry zmdLs@@jZ>@T0TS8Ptt8lnFrkx|2&%-i-R|XBskk#H5Ie{EfR1C{imH#tu$pEg+AI- zY(wn;&nnV0=wWv_wEY+5ah`EWOts5=2}f;$3eAQ`My*t+RG2GnpP5%hU6gv^NT|vf zW^lJ~N!-7$Hg!8$qhOL<)K8=pUT7F77AEtCx6ms)c;~=j-e{O2_IC=uM3WC@CO8>8 zhrCBw$O1RqMDHVvpDSvy#wdvjGraqZV3u!IjIgf=GEU>ivHNmYRhXJ+ucBT%*bt4i z*FpdK2)xZ}`A9n>9=74%adyn~rG9WR)9cw3^~s_41r>ny7P=bNGM|Qy8dlDC zX@)rpdLuXfhyG`W<;9&%*{v=cK+w`hWCN2fUIn)0E=HQT%1RZBMWicla;PIY)r;_k zF;owHtAw8|*aCj4oii(Y-Nqu=j!jyT=rk?^d;V*G~!esKK4}%ZbY#rEib7$BmgZ? zXlj?AI8X>n9;H>wyuF-7JMPeqMN@y^&ksez3Pn+L${-H%`D3IA zOf$*6-7@ZE```dt=3V}4S8RFwh-o(FV{F3oE${j62I4@~>oKaPk7mTICg^@Ocw!s~ zjcQ`;d(Tr7R)n?Fo%`skL2y|g-^b4n`EFldG%u!s_BUW+)BF3S^wWBHarBjt+sADe zLFdyQlP%Hb>-FJXcIsQ?`{!rz@ck~^?fYAF>xx_&>LELMfT?J_Y0sjqiccJdi9+6@ zrS@QDar&PS3}v&lxo`3feOj~MaM_a#6Hwzpwtb0id;j=i5N-N;UFl=zv(xo!4(wi$E%Y5+93LYe10>8&vv)CSq{&~ zI~dulEh|9N*CsHEAo+tR$0U&W)1<8v(0sRbxZ~>s;f_2^(YerODP-SWFw?t6`2G36 zJYR3`=GVjZ=1*TUlgXR^yY>EzM&=4TTLTQdA!-f&IWzOS%6qoKd$z@UJoBax0qX99 z*&k_6PR6W?2@CQ7a_mW8M^Af0_n^X-b)Lgr=jQ+DYY+Y7_aFO!z^{g@^sO}?8n=jF zV-*siP>J+Pq(4q!{z=-4!x>M-iZIPkN=E_D56Zz%j^RM4b!vbdYxLo^K7+%QcL=ZQ z`wuTyJFtTeZiM|$&%Ll=W(|Jd+XAOHj<|q zmQ8^Dj;O1UmtAeV^!cX_ca6{z>BlIGo)tfc>sHecc18r|=!sJC7opC8gn27AApP@N zH|_K5q7&Y6opZkCLyg;eJGJS`Xr7yxzxgV4LDsQhe?@MNfS(`+!kVM5AVd+#`{?b8 z__RDsxPE<*uZs#GpaOiRs*4uebf!~Mhj(BY!=ydwRp!I#M}{-%IA7oriH>lEPO z6q~7C!{eIei<7ufj@jU5@F(Vj%oihL$NBvn|55GbaWONV1S!M5K+fw?j*ix}Rq}0Z;YSz7$YCb#D&mh@L#9(DgQxDIX`uX>^ zdA7OJi<9?(tziT+dUNeGNy00)RD^q>ac744@d!S#6EK{JDem2ohel~ zYZ~DW4jU?IDT3**F&b1NuQT@ucxITZw?9UXd^^?17 z=GR7T#uVfpZwBlHdq(GwF-Gio#G%qdu+M?R0Ptq*h}hnzTJ3}%M_mw5Kjriz#EIja z8L)%EL}1K6jS?ZCK2pK*^_yMOA)qow>s-yifO$zzl+2>N4z;pi;H2sz{w%OEX=pev zEM!mQz|DB|z|FJHB=rhlf$tFh3d^(DPkDMv=J%=iA2(3XGTM7Ok)HyQ43J`XY1Yxo z$4`5|+p1%OuBjueWL5YDl`syblsjPlWKfpPW%bK9z|v~FPy6?-mgG#+y=34!ru0v& zFD08gz0+{JyEG)=LZF9Nc^xmnJtUQ+HZCSy9;VNh)sMP0&R^H~5b_M{+;leM9zGF1`9#0_eV$ z8Ho&jT(o+@H<)kPHZX{nrM@1azIPyfW=ZQTmFq90>d(aMFSH5VqG%WUn{(o@;~P&x z^_vFT*8`u8Sh`^9Kwyk;Fx>Sol>d1Be0f>E8qRs6^U@)gDD`J={@x=ik-K4_9zi02 zA9Wi47 z7K@eVLhV`>x=F9MM9=>WQlmSdLYk{|iWeh-4`btGhK_kYAd?6TJ19um|K&X-vwVIt zrh#}F-ZU0CwHukO_l{Yp%SIg`m?rxne`F{2K7EpSt68QiDY%(Gs-N@DAOj$LZ7r9Q zbZEKKC*_3s;x?)iBIQ#;bZ$0XoplkWIon9Ge=FODvcfVx5mJ?Gop0M|rH56q%cr|> zLUi#^#pkI(?Q#iv4S&^;SsJREu_m%p+SRdCx#|p@86KS9izk>f$vB_yayN^&!4>b| zVo$iW3|G5LxA}Xu(cN$9M75lGAdC}B(x;37FyA^;_}7UJ;l+W9U?UUGvA7TLu8fnV z<~^PTSML}ru+l2w{XHc;+=g-MSev3|2WNb*l?JFnhHJ$umD4B;(hQ^A)q*e-x7_w9C}0pRI6 zDk9#(U~`(WU1_CFVGacg7(t!HHn2FiLu8R**KQTsZ{AT-d4_prrxrA;Fk?8 z$fYWP>~`T-t*Ps}dAJCxUE2Y81dCQ5^_ZJG?!!DOJBrrkyDFI>bQgL&lld+$h))Mr{Qth*%4a&8E9D;q3pgJoQ*6|I3 z_eF@0kei;5u)t}^jKeluz5SWVsfl~vG07EdJafZuCAkkb`>6NJeR{-d&``Oh+vm#nZa7mS;NVxLkr z=#gJF)$Z~nA8o{kGj#p2JCpg8BKeNa^>>b~<*sBY3$(X(o(`p7id}5^z0$*;lv~SL zA$}N8U%Xq#ZcMlYrf$?xPhlO^oBEVN?J5APVS=j$;|hd3+F;-?2(KExF<2M9yV;8u z#nNULwL_P^DQu|ziG9XezA@z+tKl~L>KHTA%of`iP9@eGr~|=(DMAg|bPZ23FvXPL zrnQ{)nR}Uui(9SHv@Uy{X>NKuK6)A*YAe>7)PQt!%bs77W(Beq<2n_+c!r3gx;cE> z4d^PQD}ET(VzFWmCQYi(@o_~JvPvMpe?tWePm>gWG6~LCRrA@A`hA(~T_fv4uSQbk z$NhYs4qZnH#^_R*j{@Ug|5W%mSnAhv%2#^hl2y449-7iqm~6)*yJ~Czrkt`hEr4=f z8gHY}4mQ;y*fZ#zeZ6#LI!RSGp#2^cM6Oov=W9U6U7+CywZ!k);LA94iuKmOLGw{W zEjHX7K0)<*LI%wiBTped^>p%gNE$U<2+(X9LK6GF?ttrJp1$l&|7)h(lkNEHZGu6) z8HeK131j^p_xp3q%6^NzrB#wuJysR40Kqg~=|f}Rp!|LJ^;Y8_+76Jb(_tBcuB2~V ze733D7Z0hUTEW^|b$cBq6+PG5NzGP#LA4C2L!&T8P}+FKiGNtKl80LHE4)7VDk?@8 zb>fE1`BdyRZZo)q1^oaS5}jVx6~cp3e?36~Fl~MTK!Z*z6im4!$xV^lYAW*gR!1@{ z*MmB@g^L8P@)%Md{6x?GcADlv3pX>RwFo7EZSF?CL+l;=V+I|~Q-^TW(l^Ynx`L)a zZ@&#H%gH#RYd9XwW~Fx#bw+I*RHF$+>d)oc(XhLMZtZU1ufJ%4Nq-srb&HaliLi3` zyE6S6m{xW(x$7+{kfE_vI$blqqgEf0m^ahB@0PvaX$(p<;PppGyng*wP|MHk5)wyL z){75+z;iWH>j)i;;Hvo`b7JhNk)FMd3c8oeq&h57Zq~xjETgTn%)(Q}snb(s?owqF z>nZNx3=t5(?b&D;8U#s{26x*j92)d3@v5akn7oKiisz*(&P&f0gCCMZ!HiR)Yd(%T zrv*7=TtkD&w_sK*v(rO*OKfxnA3!claJBdzdk)=2HJrgIkxh$lt?!r2*mR5aDx*90 z@~~Epu|VNDc?5yatcm9uyiwZa41uqofNce`L}dN_$1YFYo8(*@&l-{uWh0?MgJ<)b zrtG=~$s0WlA4e$X3V}(nm8n!eA7s^zMCFvM!Y}mWcPL>0+VlcN@UIP18L)wVlEx+N zjP;AJck}V)RkJw)&Q#Y_a;)E1?-TUv!_Mu~sufMd1coQXUWO(w4FwK{423y}20Nin z6paWj4(C-Nj}{|l5NP<5NEGEBueA@nZACinjbuO=-<@Jb1FqFvP=d3(MX&Z7&5!%u zxYv8GOS-pTYUNvAmaP=HlUv^y(vsv z4xD}t>m9DvFCXu{FW#wj1KhgvkgvWxqOu8cjow0QoBzsBXAyVv)ModLrej}x^L)oz zk!L#G@BeB05^nahTlc__??OCgKC;J&9LJ@f|AWpczmL72L{F{RsUKRNt2Vum@o`XAkP|rSu<$VI5a~~Zp{Jiu4AV^0BcrR^ zwo%&ztMc-C*+TA52M5ozwb{CzUOvyy7Y8xEHQ7a`gVQy}NlaM~5j?!z2?J4fgrJZHxt$c7NfMA;&gpNUawh^~Ho!j5X1kG_jP7QE zr>bWCFq${F$Jb{yvSY;;Mw|U?)m+lN?05e)fjs;xk{@b$>8Mo7##tc3gOUgo;V}?2 zxoFHNp>|~L{-PP+L%&AIN^U-81?aPj?<4W~nHCIukT%712j-lpC%ag94B3vhrSm>I zS0TPSwl6upprmK9lqpeg<#G*!t&*6_csQjUap(|KC}2V;g_U6>fQFBRgr1b2_Hp`Y zH8jYVr&~vs8_HP5KExIq7#?5X6U0~f-i_FATVE_+>FjBy?_h5-oZ!iIpF8l=NWvB~ zb>7S)cqe3-I=J@}})mDAg zH;0dMcau}PKOAnx+xQoYdpMaFQQ3qw&I8jUwbaEVj~uCTUOo`Q#AgojXuLB@qtP)` zGJfv7oaXlr-@yo8ex7*yW_5%nORI@vDkW&1>z+}}!m7cNj!3ACU?7o7!-(5U(C)%$ zV4>%rqn)K#hLB>p!=&jR#Y6w@Ep3Ud97dF0N{D`NUiZbwM%49txz%=Nnlu{7syjPR z?vnFda%m2rnEJE)GqLEE*Xpz7dPs3eh8V*z;k#4_6{#`~+bDXdi3|rM`dc)7sEFyO z2!%MeXulSPtaB<+%GO~3`N9KBxg^5Wn6zjntomCM?#~3*sRxOn|m1ZB=&C= z8n~~)Y(3)a0bk$9Ghx&x1E3RTw=H6oEKJjyNjW*$lmLLM7&b?sr3gL3MyabwI`J z#Zviq(POnie3V@;+XZlRF(@((lrIgKS*g5}t=u+v1yL5)JevHFScklj9jQDRYP4U7 zG>zf$wRSlEG>Qa0qB-20=L>G2iCosD@Vc28X>d5NO4og&WE zdA|jr@0Y^JbTL4<^GecG2jX$W7z!kMA#my0`&b$Xv5x%nV&pm|B{2+P?GPZKNOJ3@ z@D0{(D8f`5=K5$9H+3bW58se8 zO>fg^o}V1d6Hxrv1I2|xNF#;Og2G6DCt!l46yh=jQ&e4k`?f^g@*k$Z8NXXgh0yhZ@Te85%1pT$c36J#Z#)B)I3k zzTG~iR}jYBVSY5ldfaR?_3Vy7#HV*8108c3Dt&pW&F2W28}Z$1mpE2$0;7Cev{AZ3T>5a+;rWml$+@S zetdS#{701^FyVCytTo;rVFFj@I$S9c#z-9Xz>K<_L|??R{8wkcD&nTg4z9bcz0Jjk zqXXj2eoFr(?)|eDV<}6@m6XB?703d|9x4K3h$bnA27`-02?~PtTMU9{vw5UaIc z=;Sy6&ibWwL2#=E3uVP0LK}hnn_OLJN&9NJkm5Hs3!Q2s@iGG=7^DCai$|q)HG#FF zEe;{?We&}cU(6}v^GRm~YL{8X9=iV)#5wLKpxpWnI^=SdpkN*63r{|lu1wyGwS2=q zkJ?=(^Xyk#nn}2eGTwJEKDyAp(_#$gD$Hjx%qNn}7MtSVA(qYc(-5I1p)~4yYgY9) zfJFh~ZJG|KVqaKdBMCwZ){=dV-+DR>e$FmuV)P zOz=G$H+$kw`qi$RtK+=2mf#Ca9rG?!Lz=JYk?K#1-tLuJY&B$l-%@^q9QlclZrMA|gQnJN#U^WgWEr7~xKf@l@X5{KN`!Of z0YrhopU>yR8_P)-oZd2=qPFJDsJX;+u+gh%x=R8s({$S=<3B}tr}#N5x*?OC%3OL) z3VWKzE$qaHKTO`{DD^avFe_d1ldPv&(;s6s*R-?05A07JMXKi0B48j)?*_WS6x&Ek zX`5nVPW;nEz$=$WM)buAD64s@K+hk&H;~>My07i z*Ig#JjqDwV_5@9-$oo#%0k)2P4GenySgLvDG*FRN(Q-6cDsHWk*p0#P-CUU{%bL^} zV!a|-1?X`3=to4XG=?WrPQn*XeF$>_CQj*2!n;b!4!DJee`QHJ;WJ}|i_y2xOrhZa zFV5aFD6U3Z*9C&R1cyLycMA~Q2?Qs&H4q$vdvJGxySux)ySuwJ-Z-c8t-aRX=iGDa zR^2Lo(6g!8T|KL3F`n_fW0YO?^L~Z_z#fcN$c*LDh1ib~X6}0Da<5a5){97p>Nm|Z zNU*^s4TjT;;Y(o>D@Mk1xxtb1WPdz`ryV2hO{x*2hmt~;{xp%BaR3>C+e|dRDWOYL z$E2$4?Cw>fRqaFOzNu5W$_+LOp$B>QbLK5+Y2D3smRakx-P`>L@$n%pA<>a-{iooV z-Bsb7Y{O~V`5$galg+v&{K}f=PV2{Gt#Q;U=Px*81INv_#LvA-ogr@OySpd-z(2Zt zLtdZ4y*>d1GpGx4XB=1=niTqb!zlDPe@y6U3re&zFCH%Dsa4r#UTcTBz{>&->`OO? z2|ay1n1Y+pe7^X3FEtEaTNce7;k?)N&LO+50Zj(CP+4w5G@>y&uz@n2b>a9O&lkf1Y?{%kKmyfRMfgd)_?wJY8=Sb3UZz7NzJ$1T# zvcg5Jzl{;0ZveP2YY1J6>n|P3cFoYoP{M_WDYYPaworwgg7iIt{s_~=LXbAD5VF_E z&)}msPzs|BQr;*^>lyA~-m1t>^)94l!Br%DYa_Ub0{^>}K5^ysvUo$?8V%f0A64(l zoNOgUDsBJEimyt9nH5n^D_Bb8I%h3QUE&RXZSt8B-o4B+tGDY?uWzo_>VG5H;I<8G zue7zHgUtU6jfwI>Oyw=_w=XY!8UEa3_~c!62Aw?Yr)HwySfHE~?0R*{Ocr1F<(tpB zT=ai)<4;>?mZd&c6nOP1p1eo{ayYxD4+LzidzGZGBvj2Sk2qmk!lV15y;FzE$4u!> z<)Q){O`1=g^}8Kknj-^f)LXl^mARH*0Xt!*6J?CJ>NyT7sdR6En8d_fe%IcxIwaeu-Yqphj3YF|2~JCdx^MtnWowspdJH`0L! zj22Fe@3Byp@`Y)kpZ1YNW;*H;TsZH3hh~gOwbOYA4PR5O$swAe&o9+g5lizw<8I@h`2FDrCcAJ){Ky+*hmrqyno&!3c zdqN4uTU-YNV9R$sBSASYl~@}vxRD^4w%z(0T|hOMFMtPPIO`=xfy=i8;!Ue;4eg&* zE$2lV8;ZkhyGsLNB8Qok2bq$mcavDSR<>GeuENGyv}*xjTtynhc1m$S{ZMvv;`h>@ zg?QjR)?Jv9xouCz7=QtHywq*vxcnNb>7OmsOwBQ^tG?_I=f-Y0w_>tTZhW%C@fUh&%p;CA}RrWt_SGacTzdn#I0*A+`rlE0mA6cuY!9ihBK&a@{QZbbVVO z$XyWwq#JBZ|j(iOe*L-jKh8lW6}3{U?)S=!;plg{>XYD6i{gJU`T$X;q$!q`>adKE_fJKUCR}V-rPGms6;BpiHRundp}M zx+>PYg`hF7p6Q)w$ot>VQZ`gF7%dw~xl&_^snqtwnh$(|zOQ4LyEvbCuDeu5i-U)o z;uht(efOMg+illONva<_zeY48ZT$G~@(bYFWqo!TgW)Vu?YTYJ#jyM+USzfRfZn-71afo0iNwnyU9+w z?elyHNMnPN0e^JJbI%apLapxi;-3D%L9la(tY+ywbc228;`tBGN`>Dxe7z`nH06`% z$2}-&h}=nGTtY0=E5Dg+*Hz%T(8ar9Wf3o}ifhP6(v{ibgoV^=3UnLFiiW@B%PBhf zgFy!o8?19km9kUGxj1;{5(c)Czg4aacU$eR1_sVb_-3P`J6=ad^PQ44(lysFSJt-F zOU+>A!CekD)Drcg3IK@cPRA&0+k|qC_j^u>$`0)jVsl1z%y4dCQF1xJqjMZo2#d-d zf!e+5h|IPQ-JRN^9)Y<~I=Z3N3$Z7vxZnYgNQqwna>t7YQsT(pB_$&j0br3sP0R&( z=W|iLL^b04nNxSU#j3PR9R2vHm;&2VHf_)UbOYo>h`1%^g`4uoVenOhzNnh!Mgm63 zI&=79zX}rnl;-BWrnJMj;N+YBY=H^YEWDHXCk!#m%CN~#TA1MiResK%v;fg z;z0g(@*52Ds4;a`U(j6oLWKq!l}6m`O6u+st(Nid<%Iuey?QC53aoa<{pybHby-8V zj+DA+CD{d14P$w@yW9>5w`BET8O6n1(2$iuxoGtu&18A)n;ZjdC|5PSZOiMK<<>sp zS@N<_^6WYNCr`~<>&f4;b9P!A#%3Fo_N_neR{9OIs9Jxd_VUr5wi-yV{t8Jt`P2N{ zr{~i7ur(P>fFizvamYoTWV!Dzydr6Er#r-16Vv&kw-}FudP7}lvwLOVT~5i-GTOtG z^3FN6q<0vU@_1koTV&+7*Ghx$U>0W9+GljP;%1yhrB#`_o5rlA$|k$wpJwkxJmH$K zn|6rQP)zr5kS+Voesx$#7SY>)%1^dNlUWN#jYq$yQE4&Tm>m~yt=V2xtP>{;Ozl3RJDYmmoL$XOI zQ$!#&h!k^tRHQk0B%J?+k>osO5Q(UJ<2$0yg(AN`2X72o%uWP=>>7Ns0}hkykH8PQy@0gvZR@Zh&> z(k{$b+;V}}dcD=Qx`?|`;aoz#&H{TfDzUL61UlDe%cu5sZzrzzHb=eBof*5-l1C4VVcM2K>+ru?Fp{jH zd##fS^#ZI#LjAw|aM*JoJUZyVgAa5tsu4xd3b97{0j1)Lw@5&Xh(RHP6v~3=(`CR` zpv9I_gpQ6Gz%T5(NwQuG-5DQ+M$*2|oMD`~WE3Jm)b9Ph2={zEKYADxH7SqkdVhR; zdP5D&NFx%Y6b!Hq4fAbiNVD!iymtw7z^XDz(Fn1oZ4Up|NS@8oA51u1UaW86%K~B7 zH|UT$N+Fh{e=~-GWFf-M<9g%UZXC7g`z6CP|K)pjDo#Gql6gx&RA@JUr&w=Aq4~MVTm5chvDpE&{)*$Qes=$# z1ZkjvzMs=~;~nB=@cF0Sd4C7Ud+ePmq5!|MOCWBYM{z;WX?s~%3PrO44OZiWPF@bZ zUxw@a^QYx2-oF4T70dWK{e;8UYj91b@W9+Co>Sue*Sb`Yo?Jyo%`?aD=z01P`U~7%a_~f?cFcX z?_W@N1UEY@=$R78hKdYBl`Pg}jUJBtOa0LS&?o@JplC|yT%NpmTO%=i94sS}7zM%` zc*9`vPre0-NG0~$zCEqvA&AKT2SRFEUpX(n$ajrjQm)4E(|h7Q*LYq>j9apunJ1pN zstcE^)UMcgOh;>2N+`X1RE7^UE)Y9 z>lDBhv^E1Gct3^neM+*1%e981Lk(OR)OmUg3dE) zjFxr0T%XL5fUQMB7$~nu2~t5#B*Xf9}OW zh$vU0XK0kIhh^@EGqpHH+DVekPl9gEz&@;_Exz%4rUS_Z)=gDsl=u3~W?P)~ zDnt3o^SNNjy!C67HE8zz?c%kvoyvT0Mc_H|6`c?!cbY@?p_0?(O|OKNLYKcb?8@bdV#@ zfI^hiU&8_mhBiThULrb}VlT~%SOUry{aB$_Odk({ws<7<*KGSps^bhUsrqZcvt&k0 zQDykH(W0N?L+q_j*2eoy*0f(P{XAQ+dqhIe_~0BKV>!=VJNw-{aw+h+`6IG7HZn6B ztU5D6OZL!5m*yc3F5!KH(1{I4-MXKL)2aKhSJWuVUUaFx22Y~mnaty1R{gpu?WPtf z0A;?HZAXG?xSMjHVW4j}(03c?dnu{!rOu%ZLx7W0c5VBW@9p{Jwm)(AX!uve2{nrP z8y70Ya}d&iEEK!0_nX1sF!J}-{r-qs`-`oYN6BcNk9dqGF4HsJSulRpSqZCFu)Fqr zURR5*BLe(77i~|{e%>V=?@OQ@uf|d>a0gk^8*g5%bh7uI zvv-=)FWz&6nBBdyYmJ@-gb>(>aE9WWE9kpj88#4u9Zs&-xs3T1CfF$;5c2*;Fh68T zi|9m@%xD|4JY(*j-O^S^o&e~XW-w^*%x#y`=pQ?(9w6WnLxlLEu=KMHPb!!-!eEGM zLTVU8OpJ<^eX{bZL`}Ms7}*^g(2ht@uD?{uW+GW}x*vG12zcIkIS0|9dwQ?DPCvi# zyJ9ipqJoex=-|m{{f|6C)>A{mqy8uVJRC({rwBvS^vU%VhnamrKM$e~w@ucGF&2nd z>N(obp#YJEBdXQ4qD$2K2Pdv*vZG(gpno30hnf1R&s%p5J4>UeB>PE%BK%h6C$zjv zJbEtphTN+#hesCKKY~7PWr=dP!p5fw6m&=#w#eDq98Ik28`B)uCkkTCQ}*$7Aow44KLR;tk*>ol+b8;oC^;Fuxlc{W=7~ zmg7$Em1OBKV`-U|8Tx3IvUQFDTRWI}Ap?$9A8bGeGN9wJZDv1gK?f@0u>Ke%)1zUL zLgqAVDeFq=!qi$?wEbXjoT$D8Dk}<{ypVGiiQDK!*1!=%bmEVVw{x)(uH+kwFe= z{AM^-cn;oyD{Mfl8a^zYm$F20Q_N_cYsk;xBYfP>!+Ju&655u51Pyx~l7!Ot_%Aq{ zNm6a^*g_b4znkA1r7vPPR9_HnL_jM}L8%?b<4;Nzvqw=~ye%RP@f$iN>h~}-hIwa{ z_{AmKQ#0wN-P^$NU}_;rA8PKUp-a|TSw8QvYAfiW#UN;;Rx1N{Lqjlh44vxLG=ajKx^Fh4V&|e{7T;Yy|7HjB^zx*oELdPORgFE^}EBBm#?@<$4t-~ zxW0o?WVW$)Rp~bb3%ji-k{jUt{n|M>QR-a^+Ghev2CSPVUZz)I`ixZ&i zUr7bn@#+A(1#;wAZv%|TSE*|r*fX{npycwht3yfoc`#**^U6(ytJYC=1v8`iI>;njBOl1ZfV+ zO0#Rb8o{UiWx}X7K^J|0bW{o3^F98hVGYu4Gfy~PE7S$j%tgKkWi6~F)fhGTTBnR@ zTcQyUp=svYYA^Jmbb4--a;<1qc;OhqMC||tqSkW)%lpySre*)nZ-yG22OWsz_pFC7 zCc#%X6?RhTi{_13p-6;pWBSO~q!FENf20#7%OC6tiFIDN(7E6+M~T0$+MsR$n@5j> zho*T7N3RHO;vGMa`f$WsXwY*f&R%({`xYKCK(!#boS2)FIixx&S4_?U(8lNT^c|J$ z9V`AGRSGC|OiDTPNlmHqEpFzuapdGw^fGygZBymuTo&cxJj62Dh$_}l{{X?N0a?#U z2w_Q&0-*_rvHk;DMXF~ZO{&fU(X<5k@EgZiVu|hp#9<-fNRXuO9X`Z$H$H@T;Jz9@ zMABN1oReRvBOb(cHX%g7GG*g1MAt2j<}%7g2_eL_Fd>Ba>XEY{#GKRco~qdDh%6QK zQ8#0<_#s_`#qikVcW)b66WAp`T{exFD5uhdZ%{TEsCD<0?78RLOvz|l@%6IO6&_^eeu1S!lV>uHH$w>5{r#GPsbqwpS<*bO{ zG4dO!`+WM3-?lL7kn}a7HT+Y{hvVRkDCX4|^9rIDmz4>5gOwf}jk8@LjhcFp;r0VWBozJ)<+?f3&NylR5D^X5Q>V8;aBLzWAvQqay7%EAwP)=5vcb6bcOEN z;AApp(@c*5O=SS)H>vuuA5KUvEtea{)ZEmgM^b9z)p5j^Fma~@c541m$S!ovA_tBv zByG<2L0{nNA{OOlTlOpR9-|k}WTJ5%H}-mVGh!={kLj&YF6U7I#o-vr#!Vl3rqFRyf;O#qKu z(gl{=`q!j>*FHDtdXuhQP(}e&{iV+*Q=J0uZ#Z8Q6B#shJFYjfC%@0AK))8rE90MN zo&OLVm0uz$zBmlOC3}sj33*F0OG`dB9IXuGReDu%M`8c&My}nyDba?=F4+gvCFd;n zBJ@THa8*7ybz|oB6 ztgOz%;;Q$?G=E|O@y5hl)mtrX^cW!=K(=dENv}*H22k0tiuy531x_*2g4_^4M_hZg z6v9=%MAS#IQLe=AR@kefg6s(R!!gO zU9A=D;UP%2S;R#j>H)|Tn8bdBnpfS6BO?Zcm5CqczV!6M9AaI}YXT_C#mPp0gdKPy zHrp+b(atDe^l6sS*Ws-VXui-+jl@o|_2_5o>R05%GN_0^&@JO}pTIC%hRf1D4veE~ zMmziNh#RI)7(1IgTT&$!aEUp1pGi3NvY!}Z^Nx-s<9_ec)9X6zd^+D}Mb1|F2Hzzb zjwNO!l9WJ%cZyU(5wEHAX^^dtg)7tO+hbN5h zo{*|Zh_}mP)6Iv%4E)SnWuUj<>&(0#==C_!bJByTL#T6_O?0m29c$J5@fHaXO5vNW zgF)9M%Yy72KrvlWHxj^j4qyLtI~vK|9N?MOZDaLC^oFSQUa>X8_MVL$uQ<8SkKPB3 z^{$)xrYdgpQSrHD);hV7?Lw}s_icYmfSZ}^Wag6XwSD%2pu@EC8(|{jJdw6Re$SSk zBy$g;M?J7Ry}NT&rp_c3rQ`Yi*I}e*YUx(wfzv0)M!qnzr*4-i6;j|_F z6?s8!*)~>SauU3dl|Pm3$9mwb459qbc0&0a1#joKj9H%n9c~|8f%me(}s75nHWqS2MtZTu`}y|Q?2U-DFIkR zDQ8?((Js`K{opBL2;kO42ngn4NVUJUETr0P#v2s$@bYMtG^g8^7>?uDHRzEuPL!O= zO(xm)c;WUyXOd0g&9~?ER9mOFM9!sKxc>7F77KE3(tkTl*Np9>M$HB3P)Qu*%E)K= zd-b?iqy}B}gx3H|Klw`RomLTEF4!D{acySzL`WQ`#x7k&!4@-ki#E*9q_pDi7xHc(I z5MS)uNjh6=5GbAaJO}H$RC$N9vj4U;Zjm~3}7YgqH)%MAD#$8|R^(bI__MFJ|z;9rrs zM~u3M66Mpz(znK+~; zXucd0*)ndnW&OY}dcmUC9&2~`=qr73X^sKp?+iSY+enV88ZA&izdUKFJ+{+!ahksp z7d3c>l97!&0tFPT_=wW;%6R9{%Sd2}RYC~qP8Ft_6O zM~LjsNUEu9Emlrn&i@|dF3BzBi8{ZTl?;kH+8 zZqt2+t`;NsX!}#23a|fjzCSqyMh?Oh0)pchXCHbPf0G>Z%@>?3{Y0~mqoeIQlaWSc zm8);L50;luV~K|i1QOo|GeX-d-ewlfCV3Yfc1s^8a73Sq$k=7fT34rz0}>-zU8g>X zeaVGjD{!FsJdh+2!e*Zsgn>Yw4q#bAqWoK|iX|)YBlrIsg84Q73~wO_ZzTxlB`D&- zbK<~r2&&slnka`on-^ljKa=`qzOI8(Cj0Z=6TVk%DS0> z1MtUs2n!huXAJAOpzP(PKSue8BCWy4Yv^t<8k#D@-$=00I0uk4``NL-zbCK^P<+Eg z?+xybp4Y;|og+KUVO0A-=tWat3!N6r9zgEr7^vn@*03l$VTd@GrLr#OU_-~IOrr7s zX>8`Osl6V;u_MlV-ylUUfyl2;9$j)Q5e_MgZy+L@E2zaTxX0ix#D+&rG{wrPIUtQZ zmcP=4eXJ=aOTkPREWOj5r7 zuJ9A0C6rw>zRxw#Boh_w*d1;zU&wEIGvNc@0@wM67ss7Zd^iF8Ka4;e%z=Mzi z|2l+b35rBSN{CXrKtv=)<1pMSJxNt=&|jQLM*5>4sgnNK4`c{~P=kqp@E@4-8nNSW zbAJ*697uU-LLZB*nbC67#t;5G-W94U0x=`e8r+LFLqnlhgoi0cnFL{k%Lz|8`_OY&{L{kdP!Iqy^*pL`n3e)KRA z^oGXG)YQE{47pgYB*_=ljCoX@HQ9b#IMQ+Tys60OhfC{IATMw>h8kk>M_BrkJ@;P` zFNI5OkpdecWNV_OzcH^wg15(BC72QPSW8(6k|zf$h3g85_YR2!+_OkBSe(c*4}J1c zXip(>zD$U=mm#*_>ckqahs)0g+tb5|jiYF`>!(9xBvX#z|MA4svRLB3l^A2LmK2{i zk=%{lUA|7YIuBkZwXOVH7=xVHH)=U167ao}^P7%P6O#CyqkzzcmmEZSfWj8L>BmCj zH}(|)84@XczCVor1DXY`kboGddT7!77U|;)AO33!6K<_(=Y?f63rY_9A6=%sf2+U8 z`((0TLA48EJ4G~2oS409*8&t02qqV@h93j6;}h{RRj)Pv5WgKB>UEO%U6fwl&1_4u zWb^E4D!Xe^D1}PNG*Q{X3x6XUmWKN5mrVg71T`+%1@MKh-y9@!et>(`MlTq(?{yG7 zfX+P=LS*KDw%i!3{l_QUz_MCV41}#T_}GgCtSVKVd}7mjN(JqxP<~}5);*z&D9G@D zviBaFG1esXzP3bf!3O|S?<*|jH!3bT=Fv{Y&RyloXEK7IA#@*l+r&1X%h%g)RVBsM zS0+C#f=Nj1e@KYU?E^@AO9Bl&2@bvn4qieB_3Q(5uNTawgZ?vi_!D-KZuDQT>SGcr zj2|kDMv(7+^eRKf7~lPoYx zxK7V{&PO8H=jFBpQt80swM_kuJ=I!+V^40xwb7hz5l*M1@Hr-eoPLJ0{`9HTrnqM= zcDe3Vi>()D#_3D-A>vG6>#ZS4)6P6DEbr-Bv(Zfrz9Eic{_A8`P`Mz9+oBpO>QDB> zr~iba4tDfi^yvFwLG=?4rw+mYgrda4;u&KzYx4+1ZM5`Krmu3h_LddL@kZAF=ysuh zVs(f;Zf{9#e;}V{Gg@ZcI__~#94?!%4gZhI zA86Z|g@Y8+VbUQ2!uG*WUV)!v6GR(_3S81b;vJ2|a)6!5nRf}v%0(M{5C^-B-GN`C zuZbmwi3vLKq)lHoa1L_LU#|yjX6o&z%h!0aduL4#Cs9e-(~MdmC*}179uzVO9 zP)(3{uVVfU;hxyin7TfcQ4VaJ@uKD{BhgA;wU9h7NF<=B_@`&WcKMm0>V4M6(>fXB zy%LnVIkV~R?zbZa?wH88fEDiltz$BF4BXXQ{bHK8=h*u#b@MG(^L!!d)JgCa2;6vI zvB+^MJFf*Up;c?}6O21-KG(xezFREhPrEe$J^2aVfc=GPUQWK2q<+(+u(?_=8nfM( z_`U|xbkFb&O!HNTe!eRIqhoSFZ6uk0e9Ip`25p8XXC~v9vFLSh^NFR3=AtPyIY?2q z!$zl}MFYy@}`p@xE;W3&cn^7?YZ{ zFnH`aQ-5p^yz00xTOgp+QWDwk^4oiSa0!C)u=pA41WG*_kWjK@Vguh9Uw)wN^fHcn zGbs$mPp%clHoY8L40$tM)18R4WkLT4fIiBjf#kKTHL&K2FNf{&WYXdM?KlRTz>SYX zu~EW?ix~EMzm@AuJIf*sDK*YqzAAQjIslEuvG{;)e?mtEN&im89?-vcw2H`o3rUkq zr1OBx4)(VIITnZQRkw;AVcpjg3q#KZD(rc?(02rn{*;#<=W1P72d-yL0YunDzJ>KWy`mOXC+Oga_YBn` zJts#Bly_&GCBMfsw#)8;;OB2U-^U8D9l)pmi9S2svz`%cUdnx$8jT) zNrMHeWXMYqZMpM{6BA&c`orgmiE_YUMSB;sqrj`yb)BJ!twA+~>xE$bt+ezkl=xO(`@(J2KE=!6Bapj`E-K%g}?dqp6iKK;AhQE$EgK;IvbJJ>0-%6s7OhOrj^cKyM+ zQGHQ@^7Nd*ZuGZ9%ROBSSB83nJ^8@Hljy*YnAMm)YN!>%bH9Wz8kSjMs6x-VZ_hMk z4PJs72`D}709IXp59H?Fc7h9w4Hd(H{)KcSI~-@^QEV;lCU*F=n%dABzmat8?NfE9 z(3dm$<>XA%qC5+XM@&WP*Hg;ZF#cokvBCB->nKlNY+|5orJwbr1tw#gFu1}O81GHT zI&P40)-A=u*WE7KbV{kov-F_2f^^V8Tfigqf5u%8$LO8SS&UemZu#e3ep3;|rh&Wd24rX!1~T9|VK7f@de zHVB2Pc0CiE5r55&ukWQl2LBp#&lme-A$U57^z~09=*xzg^nS+kZ^%LSc0(`mY~TR6 z;%TL!-E0QygV?TmRX3VGpp>-z4Wh$w%lzy7HugPC*Roz$KgEn2*s@J`azrC0+`_Uo z`Qyov7PfIq{UPah^OcE}d3VLQqEQs6Pk&@*gZveN>8&*>Us|0&5j4oH4kxb+z&1dj zH3bTgiP3m`?WTt1dVtso7h>T-7Kav?@L^rOF{f zjkuvylo=D3FIKRkBzBGXj#^f*ljiJ5Gf}Dvrd|?s9pmzfUHu~Nj#T21PPB-j${&ZI zz-F5wOH}6Xe3%N-i@6O=5n}1c#ffne0}~gQNgkb3X03RTm0G@ z%S_=84kPzO7nHI*8f!2PBTkfy+rH2o*be6@V!YPT6>)k$xTBoGnJ7oKX-8|7+Og6r z$SbH$Lu{);8uS@snxsrr$`9+T_xO$(w<*myNcNe$-=BysYSso~x^-9*v$MdG7ny-t zpAJM~_EtiZtP&F{ELNr+*j>DrhAEPkPL=B>e$3jVr4q%!nsBs7S_5`y=0kvg(^`|o zF|BWsb(X5vRn!Yib8E5&U-zETs|gPZop_^m)N=%dIMI^S+zBDI6lbz@n*!YxzB1{H zEtDRegm4l44rnF~^Kn~n!uY0q&LoTBICWbfiLQ6AE?HCT3*wLLqdi`qO`^w0eQC$Q zXY>|_V$L`qcC3L-p@(GN-UJPeTbVhsx8IAz-#gat(uV4g~ z?8uV@@NO^(`Ost;lSt5?Ut$$HK7-gf2o2Z|u{fn1h;6cDYA6pd{g!l>x}VK9oCwPN z6OpN-JNB5;vec-Bp(||9-1z$W#P@BfyST^su5?S|NTJlFQtI;Cc7L6OZ>NizR;ulK zp5N0|D9q~f%_rAIiCQIg1Ycn}9wC@X)x_M(n|ejNNw=Olw*0MS+9c90ykGAAtzSI`={dLQ zO$ULzzYcznoT`4ky}f&kbN((LnF*ej^)=zBclsIRZLH3Ae}8$re6!0<{eKG@va95c z`1SV#_mJ16Yi+2UEC*iPrRzGmQ@1ift?dV!`m`&)CD3HOv?^oK-ErnBKyEu>eeiPjO@t#)u}#n&ny#BF)TW zjrakGod%N>CrgSVN%*R!6mwpQk~Q3Q*Z#%kw%~d1N(mVs1u{6qgf*76i{E4oUL7`8 zOfsH4pEf3Z%U`LCJP$bw*@)bwp6qvD^qv9FiJ5>eQX0hpPz9?%KiOyfm?wakiTtiKTlA`z4#@zmwe#k*>H4o zy*y52pB2h=JT@NBU!YvKlq@-}Uul<^siJSht$!}xfE*M5`Ea9uX@6QU@n69SU2&Ij z60%fk*xmlVEy9$aC92#lbO_@&o$qAlREy~s`$|7;{bLNP;p-KHD7a73HS))2V8s2U z!^d}qeb6O-ibwCVglohnsme$HKtOg)qi-$XO&vr5Q4Y)P-Pl=g#b}r~QyAcq)QUgu z7_Hhozdsbew-IM}&bAoY61=d6UFA*d*lwraYcYn2&De0Y&*`Rix}Y#2of&r@)g&8S z6mjT~VKr$B^hoUi$rUmIlxI}rWjk##Uj;oK9$dUM-2P*SEH>e(ep58RGcS%nmuixM z7nYc1bK^mcAQol`6_r7d9IE&ZW^$~gwkWJ)zWvt7<;VNJ=Sw*%fZTOj{RP}ovB9U7 zbHUI_SmrJd*NT?J16ITD{Su5%f2o}LxLR{Cd%!_1=g*lTWCyqH2uEgYf`Hf$CDqed z^)svn7~B?uipWq#s^N~6co01wd()8ct0@RJ$jnMcZ@X@paibN#``LZ>QxyDw4cF@h zo9m?+Q5c^!w34xbMhO$^TalT2srT}DcP0G-S}bBBG9bzIrAhcK`H^v_X#QTr(ba5V zT4C0vUpIGu`Th>H;h!S)IkyH2nnH*H@sDC3g(^#E)fPq1uWu-M)hu`z#%e0HW!I|3 zX7%9pQNCsB!nxRB$0pnj8xUdAsEa_Rn3biUW`iKWVgLZcxs5ZC;Lv~=4cuGDr5C#^ ztn3ynMGE~Gnvuq)PiZu1yw_j~7#SNik%))nv4 zl+3#*(VNFHuQzxmfqGcF3#|28JwX}oIx_IqY?RCYfr@%Kf<^M2{s$@wr2ab%=>I@P zm3uzSGoh5=Bq6uO^tblpR)W`O0u3KTiG)8oL|ongQ@IQ|l4UaBLV9@F+s&Eh&E?VF z=<2=}0K{LTUBmfrLKH^XAP*h(s1(x9{%be&lsfW}7$~b(?{={NX-Zq5Aa!D!9B-2Y zZ~Z3>V9x{g6dWWZ0~95#yFP)<6yx>mL&-Dk^ozi}_BG$3^_uKfGTF6B-ZSnBluus&j=0%dy=4G#(oaO9 z9Y5naey*BW5k?YT5Q(lw57&Y}(EK4znoV{{JM5gHmK#P=GWfK7Q%c>MBjI2`auBq+ zkr(DmEY%MtB@1z{HJ-Lc!QaIu8+~xgJ0zK+;;-3T)$u1WIYnS>%Q`)B`_|wR||r zPr`a@P!Xduci!qh$;dz}-P%&2k+3zVUolywP{+^z!Elb{r28C;&WRsrGXov!w)m$D zh>Zs zTQP=CUYWeq{dgY7KUR@(FTu{A`X1BrqSEpn6M$X;&i$BnQ1N*7)#Y`vc3^j3 zkq{(LFf5m^D72E2{`VK16qb^;r{o_4BmPrqJ&_ocLCPBZjNe_|m`gVa%m|9ox zC$mc{2G=-Ss}a#g58Y+@@#=n9(A2T!wGgtz_UTC7a_SnZogh*@nJH2$()|1M zv>u9oCe5SOBTkQJZs5prHIhOqkNg?Lx4EMEX2Nwte;uc1hdJd1ri@7O~8WT7=5PRXX0NXCW%Y3P2 zfcso1iSx?zyp10WuuEakiQlS|_jl)^OfyDou8(};4d*ThFO3PGsRAtYX0Eo@j_ zpt$AYCDQOKr#+@xO}W8O`FrS$i=Mh!P)pf2;_u1Gts2Xvr>)ZJEUg--{L#i2C?*!t z4o=hrkUPAzW})u0tmJkq$IUhX*c)`KDG3ch78VoKKUzt&YAa-^{2Hq{4;4$R0I@+0 zfEltlyV8U)n8$sf-7p23$8esw#DN-PGSaWa_0?GEPq(oeKaH*9+!Lzlipm$iTBz1D zI!w;w*k172O)lUJX$7o@w!*|(Qb&v1ZE4l(bpfocN@Im8s`MaOm-k+wH217p<6eE; zG9su228|chTZ~rP8*8s}CQNrJUujKuCp$CSUF=YzR0RaWPfv6 z>K!I`gN3rpaev1tQRyTYoZTUwJZKUSicZ$zQeELQA6&McYG$QGB`w5MhM+KjU-1U& zo(L=5TRZuD-fm&{#0FnbpGWV+U|x4j*SmQ9%FP@-}_#2OZYTXVrm^tBaoSD~No-^;Pw3R4ni^|{~{MAlK zpI^CFt8erRmtidv;5@8toGvNoN%gK+%)5Vm2M<^TRZezxicjuSh9x8lHh~lzcs%j2 z|DcEq5-8~eKB@67OxB2kBuk#Zkhe=^*P%y!9Qg(_Zi%neVHD4kV_-iUWqapEcojnfFW+tPqoFnO0R-cW{IJI+B`oCIf});s zI!1j^t7d*MJwpA6bBqcfzn3B{f#_)Hjtzw->)ZtsS#Ul>3_mnJpauQ9eu63?sjKLm zHAC~Mxy28{ah~`YrCY?*uZKhsRrv6^-NJa&f6t zaDP+$3=@h->0GU>r!F3_A=7RmD5@BfrJ&eN*^HAHo?}=c@?bzq*GEe?J2kuZaSw*| zgL8S2LQ_so4~!^_p5o_vRTV@oDI9vb8~m%d3dYKr5yl{Um#4FrOIm z@10%2495M~{{#RqWtc=nO`zla$-2oWK6d}6vwBliMsOMW_`Qy8gz>uy@=X(wGq>RM zqooOWe?rVTo^{$YU!x-1PtwCOlS+2~`qZa~x?;2z=SeXD~2b+2l} zxTukC0+AlZV}MF~n*H29rULpy!yxl(;&Sy4_8(|#+~OTZB)@%QE3npB6XZKKl{$Ly zA5j;XHjwV{3p*ySB4xvzyM3^L^L@`yTk1H#r4SG}A*keeC_ph40+QMB^kGvLZi{mZ z2BCmAtA7Np4fYkY&%5AS9HuY$f#Tj;1^W&sZF<40Y;V>+=(@IH2@kfB{Iy)*{>yR+ z0b4EruM_r>j;ai=%313=x8=n6gUNt@ESDIVs zGP-EnonP8S6_g%iNt6y#D+l;A_<%W|!09|7?7`u4Q#T)sfaKbvwfTO^;RL6*)|&Vi z$3PL1@6B}SE_%kNf6BGmZZfx1y#L|Gs1N_mjXB}G?jcT)FWu44a;t;xWy z^7NdRES}~)ySpcZN%!83kObA)|s&`Wbw ztYwv2b;OD@m{O}GM*eHa2*R(9JYg^b!aFbuwohV|jO>65zQ?VtpE$$`WR@C;`aPlcQVc{!< zq&%ny2dC;jf?Rix56letFDZ$SKR!nDZ5nWH;qr{qU+Q9QZXY}-MbqHo>APe`KL6^7 z*L+Yy)CrPro7{;Mb_FL4|AupQ7DT}xBcrUXHPsIP#+Tm{2|E1=>D(qTleH#SzIa23 z2W2#fNaSJHjLpXiEW~Fr+XcP6+I+5xY)EribjsONwY}*(f_&Ig(xSM}4s=ojv~TpZ zZx*P(aRZzx_$Ii6+`YzU`PZ8HCY%Y^6j3jbINtx*RfeRu3O9xQT1G&=h!qWT=REEp zrLr_$LmJl(dS#PyiTbjCC zpWT+nChCctce7H~Z2_jkXg8=LzW~{2_KI{1R_i^Q3Ss;Jy+=QHX}5|gKA8Bo1^miKK+<}?63xb z|M*^a5#iKjhTF0hMSV?>R(t(aON-FsN`!J zpvjW&+Qh%?gVd|lXG5SDBP<(xraDZ}Mto7RmPTqDWz>k*QtI(Ne>ZNXY_xM9+EF)g zr-^F}Z`B_NrRK)*FRg6(3Js2XuPUwC;R6ivpV<+-m<9b8i{c*2A_BLeWBs zyK8ZW;!xb(T?@tCin~K`clYA%?h@Rc;;un9&+oNoci;bh-Y=QSImyhKiJa@c?2a7G zPrpI}i$wLT5^R8r5eY`sPW_T<%JOhGdzFU}z(vv2!H*WFvxu0g2F|!@4?8|RUAW;a;KIwev$|;R{V}7k@%BD z4K3~B&_Q5nhp)rPVI$Ben#BZ`MVjy5!>~KBk^fbxwmu0Y%%w1s6sFO_fRZO8>>uHi z?IWAiOq>D0dK%$KIf-Em3&Rt!ZAaT*m-q{&+AQKXB$S`Zs|>>(ZFF^Axpt}$9uH}p zcUl*A0@H{K_2({rW!dsxNbuL7mVk(T#fUdQ?g<3Bg@^yusV3m<{l34Ekg!)W;Pdja z;)#9O3{ zVocr?< z;#9Y(;n@dy?rg4fUI+^%%3 zo_ZhoZhs6l^33Ph<%~{cS>cPeyINB^LoirDks!_l^K`)6ZL3}KS`S-r6qMCiTUK7X zwW-~DGPEQe_bkj*EQR>CR=B_#MAvjRs@xZVBdcbSSzQ4|yD6!BMhSL^sm#!p)HI#G z^-7=48Vi%{KNu6M6~V)bsV3ASw+3|{6Bp3t^nr8}LH z(xMN4P3AF+@+%LJkP@;m7MH@XpQ0d59>hsYh4~r}tCBe(yD5TFDXXD6D1~&>Lnz)8 z?*d2ewB&3cn(~GXVW5Bf@P$u&|1UhnmDRL!n`@6rFopEMxFuajl9hR3ZI~$QH%Llx z5`~`((7}x4yA$Z^kw3WRmbnHHB=T5T597j~wy_-aww#fAnpC4g)L+Qy-twZmVqX2D z-)F=ttXol}$FeiO9Yx~iTi*joWsXV(=WEhjaVEb-)g z4U=*-50>!WduV-sCgotHueU*nUPb(b6=nD4s|SesX1&bTTne(gDBDr`OXfxKQ>US1 zeZz0xfH8(9R9|awZeMJ1SZzb)xD-cRSkIBfO+9zRJ_e3hcH7;%=dF#AnBt;D+^L9X zr^bh$0Wn}vb`KJxoIZaPuzbcHlB5~@w67#@e2y9`x*5h2w3ASRf@Pm3W6dNWRt_z=?nJl9*Tg$ z>U7TRea;uE=f^qc^Cc!8K|Ipea$5~>t&odd7EwpV-rpX!S}L+KH?^o`#vztfHGkIj zZH4gPFnx&ehBMy6U+vBw?atQlL2vlj;p3!s4(I5U>IR_0rSaJN{)F3_OKgR@%EpIQ z8EONe^X{#X7H zUP3l8k^SIgz%rL&%*Q_nVMd`HXuNM^rWe8Di8u0%4p!`kYLtVigD}gS2-=vJlqa+qe2f5@+~$r4gT9C$&6FH_7w;B z{h$C|T+7P$M038X^lhx0V5w_ZT@kdhAvVCh`;+Da?W5r$Aa{i?ZEao8zK-aF6+i7B z9(La6z#zsdr^fvI3v(|H(>|>PJYwpoGjlUl(BJ|sPg=BcRL+iJvMLL-)^ymNQ3Q+r zCU+jrt2u&rhz8Hr;5IxzOD~EsVZG@Ow5S!?=w}#{@KvS?!&0>dch#+rqhSzpJ+0)(=)&k-AK8V#1a_rnCrR1h1j~-X6Q+{WtkDU$u9NI7kJyxJhf@h*PhzV9z*lIDs| zaqg|J@~znb%TI}23sjcM@HdWm21G_a`}D}jnl!tbkJ{V^{Hk)YTD{2 zQz0`SE(!Pv{u%!;^Rh}2Y#3kC6RaIqkZn_NG5#&cI?`>fm}jIW?wqxAH?T3@>*YdL zeK%;^lP+-(up%>=%nWD7jd(k&H)+iL{kaZ1#7|hdZE{lK< z8*$m&8xHEcnHfeI+9TU1y%0u^(%6aXinWyXNH?qM48|$PIWd&GBWuZ}jIUf8cIlkB z-cK>;3#)LR8|{nw#sk%IbxywN z&WQ!7PkFY&RGxC@7+|@Kx{7#&yI~}H{sYjua!$2@$!^zI$695%3UJ4~ zLWbVVfb|*N!3~JWHtihjNyyy6Mdrg(gX~U}2s|QK*C%+&H`lUbxuQSvN^nH2+P#!% zyP|v8$xBAaHUq!@h`&RxH7XwAsmSk$?uZ{4Y%rbbq9Sj1RNeQCHDkCx7yjGS5Y0bvv;qif_EJDre+|_ID+_oU*E|QPdWJT5`6Ddg^aj(!P6Jg^lQ(xmTbJyVBOPmwy&_2*FCt!oFjkh*gC2$Mb z&b)|nE-Nk0OLjI_PZtK*GmU;No=giNV=v)_YN6AY6R9%9liq3IfVaN4LeW$=%$^*l z?yj0blFH`Qurkb-E^W@NuXjAkPNL{tKIGzMKf+Sq)*GW`HK<BfFz)blVr8{0sv-e%Derc!%C4e9M61hMcG*ek;Do+C&GVpI{_xlM*h1P4 zzqzf{wq7|cNVC=KhX>}82gwECNJh^uDH5exH%slzT5e5ex5~$ZWg6kM(!%5V@QEj? zbUj+=&)5>p5&_n-0yKk zj>twdyU-GM-d)s=tjajsgYyY?SpORj-WeP|Eiu>RTUYh$A|?<<18q1EaLJ8Lf_~O_ zS~cK{$!h_O=c?tt)sYGFJw&xgdYb+gk~yAWWAa-Kw);T$Bgyk!@F1)~PG0+~F1PRK zl8o?2{9h&=$4oh5Pv7-Rdw$~r6OLB%-IG-TN_6bKpEDDF4 z;`G2Qy!LjsFU)wG&Qt0rueXQYPdN&q8pDw~kQ$K5)cL4;LHI*l#z96D>^pONx&slT zJtiy-NND&m{Pg+1*#Z+|MA9=^JZdl}a58=NLlbe0u+81qA7W6v>`Os}iB9KU*^GuH zmbRzE0tr`3h1elrzBn$%WKd*UB^#*^1rZN6?}5yn1Y?}*IQ=}BK41vaEI2Pf9Cc_4 zh0?8#gFqJh^ltq4Z#$Ocb+1~xd3BcFQD0CoZ2Eig;<3K$TkhV#WE0Smvp|2@#Zt-q zxR{}J^^@L^%+-p*nbUeRG`nke9u=q7&&!ppyNqO-tO1EjpKH7kdz)#cjry@ zlz!HmW0v$q4?u7bKs<2;XVwG6=Iy1ovV%|W=6gB@GUyJmVnHDT^U4XyL`mCkV<=LHHkNXd^~8Uz$hUxKt1D!^SyI;IR^qjGM# zm;S?8LRr4k;SZ0$2;c45p3RJaD72YjxaF336kq#Fa(cId4+fHlj4*Z_T)WB>EfvWOpLe5 zn>VIs?Ec31<@o7Rc%h-#!y3cjX5fiGn*Ax*cKYwq3Ll;wnr0pteeg=2kes4*-=%Qi z9kF(~4hItQf@(3vbn%}mb`Zo9g~ykFo+;s;!k5%>v2%VAWp#3oA_#Cd4PF0sL@#-= zFgti0$qAA_YFe~hz~h`+B8vJQ&m~s#h2YC4tRwRjjc@tPZPr&~;tr8J#1H)Yd7b#c z4LMuWP_a(&k|pU7!?>g_Tl5eEdAL6e{fB&hdgg? zoK}GJ5g|^`AcZ}z_O1};>p&Xj#FuQe&$qKR_=g!zo3@{{hroqi8$ZAKtaEr~eei|G zG3cUyBR9$M9`*^#^44L_EnOCjQFj!e+^l37ZSm2;( zM3*DUztS>NO~>o5sniTK_-dm>&9{K{v3SpPIBZ+GwvqOA=~*PJ^Zk6125YnLYbb`h zrZ%+002EOW?e}bKTuiHpvQNm-hKGaxiG8UgcgzT3p8+xa5h4mS)xh-iLN%JI7`mlf zWh%4l_i!lNWn8YEMLPT^6Uo+P^r;W0_lka|fAz02zbyFb4CKaNT7I#qeO5o+i)3ueYM(pUnTzFX%q)FQt`DeSCEqNquC-4rK>AvmFH<-Ga<#AS>D#D z2)^9Eg%&4ATB+DGupfQfN8Bq~9#9^RLdBu$>xt<5OKX-W%DinHk8)}>JTgGf9LJt& zd{VSfET1C3Q&-t=RzMB!KJu*#KdrqOMAmlJ4e@l-u(Eu9@~wfn^gChi_J!57pLzpG zq!7MitI6WHsp_Q3R&=s`mM`Ko3d&!%@8hSea0rXCG>c!VBbrsLJH?H7pwxfQ)7Sq& zGHl1n(|!}_e~SY02sd=+L#wyB=jMF^N8>RqqC}G-t zU3f7e_(0#kDa|EEv&6okKl~Nj-o8u37zSs;85JBuzZ}9^ZiJ)TlyMN~2;7yM3`Kn= z$1_dpg3G~MlAHtzfl?3#Q;aai3`K$RDCmC2hK~<>3po(ju z%-$^&j(@*KR1o`pH0K`{MI)kMjB-n&CvWXBO$WEhKNFJav_I8{{#{OrM+uKQD{=A zEEoDB#(IoNqNqQO%KLdgNXJOU!ZX&amt>D#s2uO9EkzxY@rq)rvNQ2$vg2lrAo%`}^n60&3Cis7ldUZAA2o{|BjEp+yr&qtd zh#g6g2N^7!_M>_tZ!WNeDHO5*tnR8KP}c^z#M@~V%`^~6g|Xn7BzcxVL9(06ms>4@ zso;kZKsrUFRStFS%PMELzE34_cBZd)H%^Qx#Czhtt z2e**hdiyu`7?=NIDFP{)-@U(o9hZk3Al_IY-YkP>qpeuWJ3j5r&Ni0BMzJwnlXzVF>wnPrIXn{+-7&W{(IwE~=|G7f5SBD2Lp931mI zY@H$;m0S29N>SJ8gP#X;1(lfX#i>M&*SXdb&;c>c^33j(I0dUmKQN-M1K#W4#SibM zus(-q!?5C0{wI+kW#!9*-1BW-pzL-0I&n(Hw z4jE>g&wXdFv9s!5wm7>M`+?Z+&)1`UCsbUA?7xTX|1PHLWyeL}xgxv*>w7F`Nem4lOO@ z$LOg=Wwyth@>w<6>2B1e(X8*c>W+WKxLm|b#?`xQxq`P%_n%flm8rZ59eVPXc{Muz z)*s=!be*T!ZBUtmaf%#qFERL{Sec`44JkQm?O5fBRy0>{Ob=JaH!pGcv~WJYF~}>q zgjja8TjpZ}S(pe_=m>wD@s)Zg<4_JZl~-QXiulasQrj~ewf(`g-0CPlZ6tLA)=r`1 zBsGHQC#g!uJ1aHV9nj+34<3;bpEZm|=d*zW2g%G0pY+AOB*l&@aFxvMNVkS`$8B=a2xthP}Ijl9Dyo7ED zF1nnEyR{)*qc{c-U!eh)t2VS8bvkqPPuJ6%Jg0Y^O+%4?m;ShcF!4EudV*?ywHs=7 zeHLl2%>3&594_@(CJ(rgfPH=h&_X*6z2fxW)(P+(ymGG(x;xhTCJB~|<=j3!J9VVR zP};p`mTX`JpE{^D4wf@i*D|0{u*ny$O*K*Lu{PQ?{pU?MOlikwR>icO!FD`N5-1~r zojEI{OHr|>DC7ECL+}1|4(oQxF*^j@hjQJuk84OL2;u1Jcx!&$#cj@9R%RoJ=z)!+ zVa|-n9T+~5*}Gqq1rdIf72G+1E34njma4u%px=Gx1B%#uU$kP>XSu1*2y|AO0&dwj z{oXsgD)vxmgn62hCz@gpde?wb7@neBO^{rjCG#EbniOs^|HXS7uWZ9`!A_pCiQ}eF zj_`P3pR;#?F~kpCDYIt^<8?`+qFYbtC#=DFjN-Bk2Jx?p$!}%%(HUc2jPD2>K|l7j zR5)&T(THgE=p6#oSh0F z;FR{OK8;j{yBJ-L#~=lr`siU1;+ndf`3u(!OjWN_Tz*pf?RU3O`F7rlP2m73sr)2- zXs=BdP6WT2CRqmTuC#(HnX7Ev>dGc~`P*vyuB$I%J)RuTZ3LHI3mrg9nX|p?Db#Xz zg9x`MbtEsTrf_SNEAA2l8dsX~Ps!sRS9CeC`DsY6-zo_YOhMhj zp)bj3g8OvS-~Dh$QT8}&)|WAkpzuVdf@Bg~aKgu)HOJPn>+K3!ZhOK1!DfN(DbHBG zke3*v5syXg*mRFgT2jgV*1wzg4s-}1dJt*p>`KC#*-kH(+0v9*87H;4|3r1G{LuZ? zakwp|&5%q36jz&&u5+>rwAbJsZkxa7)8El&T$e$U-Xd6M8EaNbVs#fwYD)n;#?uF{ zkgPkIZ9qg&ls}XuBf4dyw$#{nhk8y`;(w15R(lz7v@zY)%6qod>!H8k=44gcQC4Pf z)^#MEC?`+qpvZfkjC1RA`o-3l)Dr&)H{z+S4928jM>a)X8u$#EV~ko+q!h=kc3ql= zete;HMt{30w+5bMN`fUJNW{Y&cmduf_QNynU6w;P3sT@{iVu;m>c)uaczR-`RcSuw zTDoq=Fz}AQTacX2+dz3sBZ~sfJbOd+i-x(!;|*naLq|RB!9CPIKg0PD!8YQ!r&LHq zMqqpB&5sR;b*+ed>vN3^bq`Tq7RFMo=kJqA#icCqdYwosENUw22fPia z%(4FMBcG2WR|Dl6C*LP0!RPD#@Lq&zz~lC#%7EfY5n7<0_&x>;&ppI*MI?5p1Y5(a z%ZWsH*T>BK+<2}S;$$l()DMU_&689XGGmxsAt)5V|CA{eXZggxn)!zp_F||oMPu<_ zuDd5C@jJ9=MRT>s*gVIzTD39dkG~`OF)3t3Z&cfE;duUSjmb^(Jx`Ng`sStrS`+1! zudvZ>v*G@EDn8$VZzJuLH9*tg%!10?FH8iF?x9PrV1%AG650R#FZFzQ$xkK#xjafo z9<|{d$|ziO*y&5L6U1S006Y6SG44g+%KMD9fy8@{weQa+!MfE;9sbSvZ|tiI*3!~b zgN8TlpI3~jp@c~_kc_U7-)-K=cd7!_K*yXEWb8aI#LpJA{12=5}u0uGk#y`zHqAQ|w^>Ln^5;bWA=;A0I#yo+-&) zb~uq#s_aTQpZ&>2vyAyc7|RM;FZ(}`xe=aNc-paiW-8B!KUhXw?Y>;zYJCtSy!sRk z(qHOMB@VrMp7VK+s{XL%8tqOgw(9noeV&Ei(Qs)OdDN-$JiXi2Bb0#ChNhScIxEMi z)r&F#^WLoO+VH4#-`$07j4#nyJxscNO}75Q=)aEwv6lptjPD!4ZHTX$f_&T`FFv&z z-G{3hsWrL(jm^Ckg6T1SDV?t|*5KavG3v$&W_vx^M<}eU#N0NP;On`!!qF$ij^?X8 zT}g1>hjP*eM2$InD?82bOZ6%eREaPUqPT_3ZtC%uu zSJP2ZuR)0l2w;0jJx2w67q1rk*E_!Ul4y}1*q{L-7I%&K6q!d#V!J!@nG{BjgA5Jt z*f7bRWaHcHZl!2pe>kpTh`d7&Qd^ymS5#A=i*rYqqWIwwzgNGI}|awLM`g@xk=bh zSdc{TXetv~PGXqP{h{umHqMKuAJW|Z&Jx7je}(!P6Mg9XF)l^>&71eAGDBYQedqQK z7q>Q$vd#6Zo;!yLzipw_#x?fBvZdiny3k-ytc$_R?pazL(TY)`qm8Ao8H6QcJMwlr4>|-1t$llw`7WszuS_myj z(@UJRJ)NjXvE5tmrS#3M*zR-Nex3m9aE-0O1!MN94wGIkgOZz~n>bx)A~(U=T~FHZXh-@(8a_D?)$^*FhG3ZiPK z3V{Y=+?e_vC4&<8*VdCZvVy_W(J!k5tJ_k%$UXN?4Hb|G1sqN#{=ifio zt*(Hz?vsBKoNa!3=`oyWW-I2DcnX_&D$xCC455@-;{9xG0b3mSXe2)L((pwlRQp)- z;-YLVSJPM3I>1J|Hkf1*jprUm`0;vSVQWi42}JL%LnKL=-rUX(qufPKk$o=yABg%3 z&s=}gtX_LSZ^ZH`BB9$b{ZQjepY6h4!bZ8?5lmP7KTul6?jISoO}g%=7c-)tHU08^<#ATeh|Bt zFj?JDM(i$nSNZ7>=r7^Rem5Pa9vT1S7`>hsG0WfSh2Pa~U)o`rXwNW-IQyDvk??;S z>|(j@F!t+rt~oPPj)nh{I=n&6<@8qa&yjTxH<6ih$e=E}q+X2=>2z&A79llx7pDYV z;cs=oThLlv$nu38X{yg164<25r-v>|q+fl@X`p|+RFVWK3ciPJzPsr1w$Wf)9D6Vy z{T7EUe6u_;gC7Nmd0KRwZ=5pi9HS}bzh~Vb3*;^`f%cZ1>tKtY4Hrg!XF^3?S0Oqi zp=K4(a~!?K>uxN*J>A=0<|OEc?^5+7g(}}#9qn6^a5svZb}>O}-hhThtTFifm3=~&tSUC({O(G6(^ zO|=~6z_gi6#mgWuqdE^Ce?KSe`3@UV+5hvV5SQ|+{=&rsWU{VO%pc`|&!ESL=woN5 z_&4E)Pt@1d93GfE({6{D#W$E{z;nk$wbafC_i5r?D8SYRGtr9FuQ$`nu_%!lUmNuE zL1Mu$JL29P4j+!}Pg?7JEnWbHo%4mq$Ni)>R8m?EM424BaZ4krz^{oV;T-94-10-4 zRBdmR7V08Q^#&_Uc(Y0sxSIl2F(e^5xS$0{p9?V6pHRw=!4g5daOP7^T0K>-w0FhK zj#RSfuiPEoRSdt0VYpr?QGD)f=K}R^@^0Ob2a7jqlk<74GwQqDY0GI>(}&xx5YR*6 z;&{!o&sUa|ge^IhMnrD?t~OuGlsDEg|dT0}G2?RfweWy`8~kDmUB3BRZlxWATDVHzn`%2A%8c@tDU} zt|*?$X%_a4JWMs3MIvovV@aKTPIH>O)d9bqHZu&xj`Zd@4c}t@-ojX(7NElsb&OLVW*f8W zCQ|^zofW1-(<2|aa{PkuB)jb(fShfVQb+r}KC`bT`*8yGl-!+N0vp>Lo2@73{o&+* zF}eLNDv7{d_K5bCNZhkvZ~(wtTfLISyHO0ZTFBtRBSP%F%;eh7&Ke(a=IRX{!w66{h9!v!6NiUtG6QZN0#FZlf9jPCIWA( z=$z$U9huiS%Fz^`Zq@%#V9Q?P$=;OWR-PaYpuWC9IwZ0L6k2Zz-!Gh;7iTVap>$hx zQda*iypX#Z?^Pca+RF>Hr_6|q2@vC#@*Od5&uZ$Btn-1pe&_G$ipwZ^w4OROz}wSN}=bf zA5bk_o|^IcHCLz##?QjHV#2pZeKkKm-D=$yI&Tv3h94l{_k#sbfO%%r zH)}xlxLD&{tu7tmXPS;Vheoh#xu*YS$Tr@oiPoS*HBVaEoy^k8;i&aMk5p-=i{QfP zu9Nv9m@2<%F=G_J4RT$qF{aacQ}$3+^WGSyE< z#yGT#l6Y?w*E_u`g18;aDi`AzIJNa!IYrny)9$0xIYZr&*m$5ioU|r6z&7e%3mvx; z+n$3Uz~%G3-l%0uTV@w9={6hJyT(1o%XU8>>@JAWJ5l3?O$I(D)nx1olD~BIa>LSJ zSyqd%C7JkXaKqL)0j>bPzkFiA`p0<)y{T^0R^_Jjz8WH~#-HDDC6y)vPP*rmi!3*l zGo)E=&RdHwL>_CO9BMUeR;e|7$omkfa;qBz6Wqcbir(;(3_{EqOmZ>|%ycrKhMt>B z9Z!^Xi*&Su=@OfYOr~<3!;4Ak95qz5L~HU$n5D?DhyynFQKBE2y3Jor$HB`?e_Nwy9$oQNkNMw?gyud6H8^uP=XkbcWePb`$y3v_7>9? z>?xW0DiuwNBT`S@7FD(JLFsS7lnBJLqzQ5YI@Fi?U2LlUZlrV`Od7e$X4y2{2Adk; zpu-VfG48#aIm%LPLan;WUdM1*8J#iDO%Lj0R@JHz8ZAbo)&bktb7%9Pnn1yX$?O}gDsNh32XlPB1k^`7#$R`d5*7D#*trsY&89<6fax0RPfQCP z9S=ih9P4k$`h{4~=k-hGyIqBfc`|S<>4@V#d4#_{%PB8l|Bfk)PAkc}U`F?^!Z`mP zL!75s8~1YR`$m?9-|SVfQ&Yfp4(G?<;dasYYW=MS#uAr7`$G~Z?wNOG9Mi(esw&A` zoJlHuVQR&d%D8x(0-SYYu;)jrUgdW>KjXpv%Fc0Rv^meS5m`p;oY}JCs(o%YkJv8H zaB}ARF7`iKcirBr4`8) z=wzX~?-0P%!l-OX4~YDfp9+B-wT-$#fPdzZ4x>*}McypX=IiTuf73sH3*1@()Ia|9 zDfmxmeLQyq+Fb5#qG(NI6Jx`n6OKp++U1>}YIW<>ZKn zt8uT;Ds)W1ca=(!*gVM&%$yv&u=D<-$b zsqKpEh30R|EN$zX7EQ~?begn2;iKr^o}2tWi{ysH&w)7clN3jyQ^TeDFH00nf9m__ z7hkbQ*p%A-{Axi!q)%W#NZjSl)^Gg9K)=J|nU4SM^4d7cH0L_i) zK;X1Hsu=KHX`s=+8?V|>l%^pndWa~gHpZSdQp5?|TzSlpr>V3chfhyGSy)*RWhuTCb6LnfrsvArc)5y8A6}2dinjZd*cIhXPRv9c?49lDS8z_GD z^%KMIeb~YwfGz6Mz1$H*lr*L7&l15pAhGuG=?JmrF>+OdfG^__EsZBDG!2%gMq&x? z%eW%Ot4MbTKY#4|6E8iY*zzDP`HVne*knQJtn(*tC#ZY)i95VF6)UbLFO)?V4j%YM zL%hL6vO^kUSriylB$Sd&8fl4n>Wjg2_-S$sa(U7JgM}SlG;tdc_VcB#hw7`CtCUK1 z?l4(cUD3!Cp-Z3HxO25HnR+a#c;at*7U>)$Uq@pK`|KI!t>K?EECFjuf7AFVM1*l! zs1LVk;KJZxec|uJ(r4^R!dW5d2ZeAFwW4t7XvK+&RZxQ4HYRcFU!Ka;Vz*eMKQt@F zSwsfl308(i`~8BqvH!otUY3f13GNc(xzPf=k>BL_Mk{V-m%5-F`R0{x7oK__#y$jn zM>3#iwzdn;mzdjscc#DH*)?8N0R!D!0J|o9?e%QyYAnX>IKw|RV8+fYNkvCK?Z8Nt z?h245a6W)IAI_uS-lHR-8M(D}L89U3rQV9D0xshFCJXQBmdVOY1!jYM3JV!hj!%B+ z9RDK*yYKC%TP^Mx!*GDeB4XMPZEYuELo%pEO_ka=apm26?)Q$P32`<~#j*7-Af*mW z>i%K~yw1wK?L-#M2SVH&Q9XY=*8R zKzG`{xqsZ$j3)#~|K3goe#h&tE##X|7eY^T#bgynMNBef8TtelK^lY`5-VAn%52*m z+o76vzLwUt*h^l9E|Q~ShU4}}q8fBs?#pp+DqpJuC2AQx;^p?x=2q2NSg4mlVm2h!xuZDF=@N82*_Gf5b{PXkp*Kn}% zI_G4DjFXc&-o{bc>zA{;gf)=i&ImPi&n5OY70grMr&lFN0gUZfMC!S`f+(b{2oGTF zc<#gQeluPkQ{zjMJNzHldDD}Cu*}kXLTjKr7AJlQaHeX?roJ88tzQRFJ1)0zupQd% zZ_RLM`?Dbj=Nwr^R`Sfm+(tf-m2h}89uYFF_73-@OakIYO^YYhHd{#t|ioxtrxmkteSqwiw32T8bwGos#m2g7Wz--dX`MI4X@GiJ8R7>sGk% zhg^E(FiF*;)cBH($MvIBYoWrl#rr%1OaEg5oi0^{*pRL^vTTJ=J~v$cD|jq zxH_wl{rVFrc|vpS^jC@PPBWZlQ3_2IJx5<&3exQ@8fcdS~3hMdxvEslC%z z{?{h@uH}po!`_=t57EjkaoD^99>jK~OJ(bxK!)HV^yXY_(B$aaoQa&w8j#Rxw=(UJ z0nh4_z~Gz6e+_b0Q9LHyRC5*HprQ1Br1|UP%t|`Wv-}zgnH;Q?7zH^zTMv_g?s1F1sIu zkcLAk+cwXr5Z-g-ewBkFh~f}~N_4025Rq`Q)|(%3EYD|&fGye3a@P@x2 z&qVy`SwC&NCrChml|v9UImCZ^;ty`-C11EDXzsu{1{*Go=VIKGUpr}Ik!E$qQ;eF@ zUui+!33~nP_HWD*^S01KQ+mT$nP~*c8Az%hT>|UPf($F&H8t%f=9As001~{-augA* zTgfvPjKAJ{R{VV4J2}KDHj=!ud2C)Lztt89mZf6GQ z&g-{r%1Dwtf{}D2pHb$FG;Zsmgf+o!tk=v;*~ypMd-|(dbS8 zN--23bjCPz;T|n!W6yr8YI`?Aw{p&Eo6V{g;S0*#hU*w$ceQd$URP%-UE*mjKHse8 zB3#*lqOeTk>v0x5Lq5Cd#@$*yKt8W?OkX~r`nplV!!kmQyT8R&3O~U|*GlFSB{Z@S z-ZF>X4rxV{gm~Byk6L?X1~$LMG&B~);23fL`knq!U6LG0I`rKG%t8(DMgtzt%uJf<*U zo8#KTa!cu9@ZY%al$)9c+KM)m%)y-pThYz(;RmdOcLm zCfuc2V>5MQyX;Udk5B97+%+OJI*yJAORfYYwh{NTJ$Cok&z!*vp9i@ej;cc?gFRdA zr+J_(3)_-7O0<=VHe#bN?Jq{a5y@IkCdIN5^B{!Gj*}z&pJIz8oU^ zl5+5&)=TzN#U+l`%Zz?r8HJ?ZL%b#}yWTXL*90C0pPnZEdLB$qKqxrHXq5QZyrv1i z0}N^fRm8T4BY0&t9Fs%Z4eR%~Ok5;%)xW&) zYFBT0E#qFBfNgp3X@jYZH1u?ui^)In&|A}<#P6rx&o=^LGSls2*pbkiWdxUZT>cqL zeF*MP7q(Zl#o@%>yoNqE^>qfz3>xwkT2{^=t6imEIyfDFg`-L7m=$incCBI=NL1Zi3E1x*y{GWMBF z@^}CObe&mK!2!2&uYsGt)+_E@xjzD`we3Bmj1MxS#>W7SNuxIItIR!_6WUnyNh6qAvE8Bu*ru0dvT1|{rZ9$II=DJ_ zit^@RBAm*DSm3tUeVNLDb#N?Zs#yvXQKJr=X<)!dk)g+5R$h0qJqAnG6hiR5wV*>x`K;3Pf;X9g!%lj;&`Ci*XPLpA1Kmfub0e{& zrxaS!P>uNISJ-gDX~NF9v5Em-m|dp127^ldm-@vX;ByJ3P1)UercJLCYPq~HwZ`_Q z4jIR*>yS(7*zqIOMV<7QZe0SWDQfUK@F_Hz?Pirt+^JSFV7&!3m>XJPg|-WyzXJd0 zC%J#$>k5Ip0}r%KlfA7CIDTjK@?Ww-!%TT%4(bkm$0}iHepK)7(fq+61TF>In{+r& zn>bz-0S6Ec(+_k#8!eag8RA;aWW2$*3oCd>)E`MT^_eyGySO@Plgk1qZZS8}rjTwS z4hN@|eM>tuT`}&^22@skO*bxP_##sTYfUWfYBA>rURm5gRhcIq8Pn<&d4tgL)^I*E z5A4bt7ip}e(Wq68dR4ZTBe!$@8flvD%#Io_x9~B*T8+de=WsJNm%-lo3;&e%H7JN$0XbKY@?cb`N4o86qE@JCNkfaPSNJB7sOz}|v_p{V^ z6Y%Xf_0e)di)7x|8?{=zVF)W{pek>tx%+ghY1FdZ4(6rIkhXdjOm-fnJpZ!1uf&`e zZ)bS)cFMl=mQdpvhQQ;DPAwb zLn5Pm{`4grUYdI;jAHdC)4V>$fOH@>W-w`RekgToLe-98n`ViDyu?XX=a4aCnAI$%3tT=bzL0{HgaNgBftw&~7K!uUMZI2Om_42rr)J zr|V{ghlDmhAI}55tWKW#9H0LtY|`FD1-xI+F}*#6<$YV_DcuZ1a*RWe&7PpxwvQuc zN8)-|DC%z!ixha5j#d_eTZC5KU*7|-*?>#Uit266P`>rPn(kC zte(vOZ;1wfRJ{sZId8Gi{eMfqZ^O?2TLK<3VfNrbzJ5^NpjY`?MmGD;Xfuo~&L@t< z#Le!N(jYSGDKpXFErq<1nb)jhON2otp7(qw;ircakmrr`MwmTI5cF^+?3|yo^q5E$ zuHx4(k)NW-uxLk(qhOFQMBv!~;62SOM(aMr9%U#G=d#1oCJAZPqbS|eY_HeeII$+N zy2wHIrVwlY(yQmrZ6|35{VzlB^@q{8gB-9Sktat8B>v@woVEE|WtS;0(#+F5S?z>1 zObGOz4U5s9yn4`Ldv^CL%i3dpsDOIqQ|g7!EEE;3`j|b%DS-`gv+@(dzMJ<5q0~qu z4=5rzX;nG>UbZD}pfd0$G@Eyl2R;_qxj-`1d^jzRZ6ObIEjJQQ>>#`{k z5fy;vlN!&ZRhfz9##5T=ECci&`iw)^Hi2Ba6Usc(_Wz5uw+xD_U$=cp2oOBDhY&Ql zySuwK?(XjHmf-FZ2pZfSg1fsm-gx8O&b!v$Yu{7n+*`Nme(U;o&Hm8U)pL&VjPZMV z-&<9!yFR*b)E zwF`6frN4MT4c_o#+ z975fRCoWy(sGEp@Se=KU68TL|!w>+#N)ZqV zt?tzC^z#irdRin`F=TKZza#uI|LG40B#op|(u306RKlWQ3_ns@t4U?3yD)%nUH#QU z+Bh8by6b^#L7{@~OHrQ_g3>SMpT*aOunMsNn^HDu1-fym%AqSoL=Ci7$GM#fk|jc` z2Lp!TGyqXCiT6K91$KlB?D7)j7}JF8d9~Zg3 z!#|dp)qGoh^dB2*v#5^h1Wx3K)?jXl7bmEuV46y)ramX+^LcLMrNKr0+oYkI!ov61 zPI?~|H7JDpU%pg@3@94T?U9t{B|rHuS0VXzN}51#1V%~u?t>U@@K+0Bno_F!a6eCP zug@=+?wZ(9kU8EUcf>X`AzOTb_$>U*IPx4RyHxGh{OL?%Let#k^1IwS!gn={9;IUi@QM z`Kqb@rq#MO94wM8ZeY>E>t6ixYrM}BY1dofR}5-S(hA{z9Z$t)sd-x0;kmKxl119_ zPp=YXTGuE0Lyz0T4~yXFCY{O_voamAOkXsyAzf#VCNq&xVN@71je&?WBf>&mEULO+ zp`S=@VD$`8>j=ltdT#$?`=4^^d*h3P*NNeH|L@@>q(Uv`E8|kN zDW#ICUNx6e3!R!08j9sBlM$!3Drbm4xYwKVbf^^$+vzu!Gd02`Qi0)DvmwzE{sqw-naZBty1WMoWtC9z3&TLcza~+pqbpsu zj}%Ps1v3Kde?d~r|AibFqp(`D>bY1-fgiN_++>T56s4i`^b0%Y^7sJaSn2b(QuO@E za9H`;lV`Ka8?(Hoze*q;u##%DYUOYGx-Wvg(r)il8D7fpe7&0(I^VSs%HF@v>blr9 z&EA@;4p6JkclS7DU2p3ybwrar-vi0 ziWQp-ZZ%eBiWLIX>{{P5|K{z>Ml@Ar)E*aL5zDBM{-+L({8Bt6R(xL3g8I#rM>tMB zSQq8^rZ~`vbq*)bBz63AW32pwC)*eY@UI>=#y%P@kd$h{0AIdM1d={3!fYvj@Z)@O@`S0KqNGmJu^x~b52b6$k08`i9yXQdNSB_on zw^&hy7eT|c84-*SxL=O03^e8C8zXLXHYTQ@#b|D)7z3RwBb7(I6uf5aHC5rJyG zb691@gq!EHj40Ag`mZ2YWamK`hd^8~^Q>VOYtI`yX^H0pev)DYeF91HDN~X1=VMam z=i|HmDh=w^v{Vght{Wf?fYW{r{_vVm4KkWo#hwcgX2<^)UT;PK|NbfJGXNp&5SKtJiGx&9VGsd)@{OLKaq#K*`JVozL@mC?V}f5|6dD- zl>JNA@AR_y*2~X&;`!+SdAxfA&ySEvp;<>^Y=dhnN$#cy1Afe=|w1PG3fbP}R&!jlhC?e{6go`TIU z;9AJeNSBBjp+}$6$$Aw1d-?q>ayOgo8<`qiN?DdsL@d6rSu|l7`~3JpDVul0YpBph z7xX0LF^~PLv3a8LkB9ikmZz;!bI4X%V>8>gF^>tt%6#|kA(p2v$l`mxS3_MmNVjsp5(%WuEu_@ob5B{ zV8(pjLb^=1ue;CpAS=%W!U8>bP|mhjKi5-cc_y5AeeiRB#!Ch_!$9Sz7S5Bu;B^}L zmuyK@X~*!4asiU7ispL;$elM?P@Qy9&oeR7G(0DZQ>!FQvC{N~4000cyLkb=COIbA zdm}SoI@{WNVC=f&A*BQPYcaZig6DT@thR^6xfS>%@Sfl#jBoki?|p8r@87B2t_3%w zCYEBIm?*G7}hcmLozopOxTI zvj2~3v6Mr6c=i$trl43ogVYQBohzM<>+D`2^#T;>rN6F))Z~Bj9GLKI=+D?+I=NoA zUSH0NBk4LD`iZp?e2%~n$D*v0uAew1!>9E|LdXq4OJE@p*7|^g`HzJI4 zjGi@{IaoDh*)U~_#iOVNIilC-oCq~LQ_5(AcGb>C{p!q3Y+@y6zwd(yUtHmX%rhR7 zR85)mTWAM@a!7&(1zk%&M@PI>JgydW7G!mPM{d

{F{RyWP&OKfYpBUmD92$>0R=Vw|#nOJXJa}3Zvc_9pIVN!BZSh zlE0>(WqB>VoM^Wqk!@-G8PyA)Y~hr5dpGR8Vd53QV?IAO?Q|6fMAD2tX`{+gwruFO z|K5q1jN_4CUi@x1YFHjD z^Yq0Do-Dubb!Hn!y!|$?NRr!Asqg6jUZd=(!KrT(_D-q-z+Gp8kj}+*nKA_)^CiH# zfC(I;-%l2(TLUoFI&DM)WvM5g%s?v2F6XDmbNuA$XDTBbrDQAz+&HHyE6VF7pVhojz1k9Q0E1Ja?Rh_lD|EoT9dCjxp;nDnWe#QgqAnv+bzhG zrL*C1`%})Sd-2@WY-Sb8cr!|{aj8}flV~NhOvzokeGX`o3s1k8(;|wUNJNWr2&n2^mAuIdm%(jFNDwe$^9LH-AWyASWhdOEK4>h_jvW5OeYxo3-m-K?I`aFXw)>|S3ofy72dgw zte9;nm|n8e_h$glU3oFvs3*vI;)3eDeV4qXpfSlkg~1wKrQ5q7*D7LkVjecb8d$*#o-#_!pk+^aN^V&F<)pR-6t*ymWGO9I+=Z+ zag;2U?DHAiVr_MF3z`*zMW%Hl`w{0W3cUU=bjA0KUfY)?bM)5?RUY2;cc@a5N+BW` z;;?XzpV0ewCoM!t(ZhHRd-QNW25(u%>?pz!4o!T=c258Y9~ou)aS{10mS-Mrm9Mib zPE2=#fqU!{4x3dveg zIKH|+OLlj?J09~x|Bsb2`=6(0hQ+cil(7qyv5Ouge*;)vU$oY5lK}QGMfuiUFVq#+ z|8w5uok_H&18G^e(kF{3*Fz@E|0Y4~AW1OC?4(_3hWvvK9AtBZ8O04kX{K0u5cu$x zHF-C$2jY2ye&eW`&wurKl4WOzZln>c`rl+;D00BtkkcQN|cfQuW)i@Z!c3W$=-(f-s?XSbvK~3H3lQBOxFo z?2D6D>n_xPnnpN9mG8zE1+!&RT@X?DHPJA?ThO zbW#dT^qa)Q_Ht-#t_fY>!Pca|uJF5t!PrDd(P%jGKSiU)UAJDd>S@02vX97q=U{(3 z3~X`%aJT?Ckr?Mon1=@wQ&I^ADcm)jv61ll`9c5wZmBw--ze*=v12$P^c1WpHNw|1 zNM0cjyWg0*1W8Id6ep-Ca5FL)!I;6MRvan{Qh^c54O3R5VRDua@i?BtWHuS-to0pw zooIMF3P`p3f0LUb8h_)NS=t=b8PxhF-ZG0V^a3ZT~NQNs7z%FMWv^g0s|*4{Z-!Mcl^3GqIRs=d!*3 z*&qqwkIC}4fcwI>$37k`r@0PVHp$7MOU!w}Y1f}ZkeYchE~Y6}82YNpldz5UnfZMj zMf`CY))jtSgv4SoDJw^RK66hO2A(9!7L16!F4G zLaxA5hQY*Ra!1CFksd;l!V-2f{tSb?ze09f4dtNuPJ@}L)~ZJ`d+e)#3M2E&C>?st z?U-4T6eGe@Dswu`=fzhXBLCqwl!N~suIAEK_yrluLt7#ZC0r?5mvAPAiM{(j1RUm$ zL6F6j53~yF!*358(zJ1IH4@cuGDwq&VHW?TVjE|JGRl_+oZ&i&7rcquB(0nIt#NdD zh*!p|@IFH8Z2YTI?&`8=Ip{d#LNtc;UzKtd>uwHrqD9XIo6Y7{(^T1(Vds_a}4aaS?HCE`{(yu8HKPC3^DdoOz=4?jbt!j4_i~q&wrAX8Nuf$ylH+rcziWZb+ zUNa~^pzG9vor$lmdVTeaS~2fgMHfQo`@(Qb*n%mECnz2EUGKl-ZL0C2g)UFHZDE_+ zxLTi&v!4E8GmjZl)%^H92BZcA^Yw3yTlWE3de4VtqLR;|$`;`I0^N`Lz3Trra2=EG z!iq?ipVPV%qkeV-jc+YM&B0D`xOKQzaTQM%bX`{H!~X|`oAHmr{U7;^$U}7cO#Js_ z#WJU)c{1fBx*&YF28){#&&26y5T{b5Z_Q$d^%=R@>B_j0L#p@^ySv+_yh)SH^1#xW zQuT%{cN){SXvf~g_`e%1yeHS@kX7mAN6m6cNjJ?>Qhj=Dt2g=InfwdUVeez@^#WL# z+Gd|WTLuZdwAzxWmA&n6lTBdzvsO;8QbhS3 zpq*Nl498^2!1YF!(~NEWdIY#02~Y?Z39E!)QN0d-Zg)0R@)m((Slw$l%_R)0&Qk1pV;NH zok`pB>AM!jwbQQvAH{&PAAzc?@Fwa-drASPzB5;@+Ir8v%FJKpMbt~a%uSbi!%vpssO+I#PzEgyIsjJl|+5(oLY{ntSiyEYE&=>)Yz4YjDnf(BnIT>alEmPb zjJk&(Jv(xHZ{{G~v=#Bjm$T}EjJGmrWjN7IhB-40Q(OuX_z)i7viNTSok%F9OJZ(Imckz4b*V2DwQ5f+&yhvP@ zM=u@mmPt<(#H=Rh{nWuzjiIFW-MR`!qeZ7rO?Bc-6bXk`mYGD-&d>o%Wb&M)eeAA) z6HhTg)QQD-e5-+Os!KX-ea{2to+zGShjH9#~o};gAlzUxd6>T(3ASh`DC`e?Bq)iyILCSqk zht||va!2OsZFnKNzueCnx2i8>ej(CLN!vZC;_mu=@LG)Zy0gB{#X!v%_jXbkTEln+ zjM03@$Qr-*d3w5(;%D8euIU1iK12bf_>E!IG>^VgSIAb)3>Ej1QA#3sD0{t>|^TIHC|8IW~<1wD#Cs7?v;sdYr$b1=eOLK z=M!<;MmjZkcXJa09_Ah`mY&Z0RcxGO{jJQIc=|cHxoIr?P%WIb72`PODVsJ(3v_nI z%s=C50dVtmW} zX*{|FP_>bBBk)|+>DO^lFmh5!>ywv2wp+IzA4WAF^tAd@L+;zTsJ;xV`wk07ZtS+9 z>k4w(6Zv9<&9~2;z|eY55NAdUB{yvoL&c<)7d4N8z%K?WHR5Nz%0y*zK5VhcnN`)b zcgU)zUu@)U(#jT^H4wnd4UhVvPpxCL?_y80{k58%b#tHe?98}^vb226q?~D=;L^3K zn%e7nujtXr_B*oL86HdwGR)hnB{vpLzam;(jA*CDIWt$b zitO7T?lB0hXYas(4HEn zKG{_x?HBhcP>H;JEo1#^dzJucrZ`14Aix@&J`CXW6ZAeJ0sF}_A*~S;! zAWK_#wb9Dz;T?>1xqUuoXmM=N`|Av_a(iO2_A57suv6!Lm+aQ!Kpm+KEut6mHkOi( zw;T2T@-%rbW=iB!t0oxStIMLK4IZsI7YlP`NVQ)(X~%`-_UHIxhR>skeRE7hu)Q*_ zH8ajd83tjyseFwxREf>r>7M2O&|)+wANgqyA56G54|!)-4}Q%#7}IJEr(bt9Vv!^r ztFJ@!dv6#3RKAr_*$A)RaI5!iv0bo*3E`LHcy)X`hH5_>gB#lKA3yn$$@jAv)HYy7 zqD6l0`(lGn3!i>Fm>21J(oup&^&-%J>UnlBfZG3rQEw4JgIW(dl*=qXjOa#sL2WE@ zu^~e-9Gs_ROUfAsRIAMH6_=p>6t&7gp4V10>2oV+GBVokT38jkNhv5sv=hVjUx4!f zP}SfBP_pMY2>Ir=`I-h_QF)GVa6rr3T7o66qy zCyHzO8B&ELq4x})DBWwaa|)0iWq#rcZ=-H9Zg@|3VR=ZJdlY!Osy(L_Cv&R5uBctA zsA(V6hFRa}ie2M+6I0oz6;@dY9CMag;^uURJF&9KzMb|{ry7QQVp938!Fm1*naC4x z%mruRbuF~ebA=%hDaLrMkiLDj2Fv8K!{5upulenH9BCKX$L;Z8fcWMf+{c3l6f2f-HYpv3(6#OIj9BCvRg zA~CK&4SZE2O8g|Me0*-#a>LGvc&V}c=>0|1#jZKiYg%C=Cz}#3vLqE*fB8>( z&TC(lFv6KmXvf)}cuDP3W%H&Klr#zqsNvmbn!DHJ!!f z8$jVq{l2h?>^eM))w6mr3zd0BN^^nUVAy}-$ z>69_>K#u3Lv;H3YLGyXEtGtq2o`QG7IHg4LtuHVl{XVqL}dDDLld88@`@$8KjCVC76 z6$)C33KzNVK&&@$&InaeJ|e}k_jpM5Xl(1hJW!8Qhjjod=Bg@`m8H9|6E!*V00l~E zis=WH?4ncnC#yT&{N?Las!5a;s=gm!hL^|ld$Riz;x1}JJO#11CO2FJ(J9_IfbFPr zbyXfwV1^$}4L;py66y?h39L9FjyJV15>vcY+{a$}>!661z^#OspYXa2PAwPf5l-iA zUP@K~TXRhs%Ch8H3$8u@mt|#E(bV2Tv>=(w1W7=WnL=8F)D|<$50INTOtuiQfNRDy z&%sXDxq4xQkUu8p$95>^P2)}=LIG~OMi^PK@PlaE=K)P?0cHMZojqnu^uziOkIo1A zNm6V;lWL*Fu!log>0P6xhB1)MwZ@vYyU0_otsk=gc^{DF8d4`9M5<1?{d$^SojW9; z&Hr3(2|EOe-DsE(cX!1-g)!KdEbg;KCbKmr%(p%3k%%JE&6)5e>$^3fr^t*-5ad-Azcj~R(r+4ao&}*X&?K;m+!IFJzcL)=h4B0 z63yX?-NI;}h`vxmlj!!sL={W{6PiiP0gU*L@*=s-ss=*eaFjmc)%IYL)hpdDI@P-NCiO z^xVR7-=dW)<9A*p;GRItu+uBZs=)9&K4-B})F>*g+U}--ieXWX(yL<~vRkqGd@pn> zLPa5rWGKOD(>47-HjMUy(O}Pd_-hQzoq<>QKL`#Yw83$3;0R`n5MQ085*5o0__}fc zqrb6cCpE>B{Up97owlu^kP5|H9a{6z@a)Epn@37(m14(!$nn`sAneX%25Z%}KG^Kl zK>BC)^9BkmM?+<4K=zrN&Kq}q;?uHtZ2)TX)Ydk;F@bc=W_|TU@2||7dGD0rshX6D zycBumDClIu`Oz&tsv)Tn$FP0QLZ^UM8greAukGWXQGB8~nCyM1`&K!E^xXaQ+V7uE ze*)TT$JjQx+9UBcykawJSZxm|P-WMuh3O{eDGn+>rV5=sOy?pC>o-3>tsh*ED2?*R z6nwFQ-o+dgzy2*kW7m>>-?~oIqw5uo+15LkjqHDKUWm6bt_!fFEUQmUN&C*(Ju%0H zIATLcDWmsMG8wvP4;9MfEs;jweg8;6V*b6dxqUvv$GwQ|kNBkW1=`~J9dhE$z{;(> z*}Ljo6xepYJbC-SJSS9vQPmdA;rjgDwg>!o$#XrTRYk$p$|JVP1ncf-USK` zOb+#*d1f=H=O2?$S3a1TY|vBXF>TE>Uu;ELX4S`pF;zn+e=bsZ^4A3TDLk&SW5K$hDaUI=QayI`!?Bjm(lwOKfTYLRoTmCAG^$+oWz1&tMdoL;?|5nom z_^_s-T-wBpLgMfR@Kh`Nuz#Cj>Cr3e)1;R=i_30~7^ZLv7(>qpyDgSL#I6*?MsVr6 z)L=i)Nw9qL4!uG4vw;_(TiC5rXLwv$YU0A^A4_Eh%CZ^T@iUmkbp&tb zhGrh;WJMpwfD$`veCv0bPv=+<$$hejRWF4c zc32Z4~QyBvftp+-zT`mRpt?+ybrC4 znJnfRjKnbWWc>KJ*tW1FbT{X`dvWGaGD^1o+sLAW50a=`4p9RABqCGewO9{!c)!yb8l?+8jG$rR%DC4~EI{;AnzpDaF6nb#u$ zULlvo@6!-(5R3K$$<;13?R&m)$ANBdPpHGq?6>AG)i=o(N)34$>9zBoQ>A#6QHq;Z zaNCB=HpDIK)$m7L=lCV}OS*}i9_R`rm`u!k1QcoX1M^^0YTNP z<502@8x5;LUA+vI^!0)?EoUl*F~Mkux;1oXiw6RfpII}(dpU6}l+O*CE`k#qUj~6y zeaTQ)&qK>6iyUcs?NuoVeg3osz5C)6bb2q{Z}S8Ph9D83A0h*|xyk)J?bL?rIrsb4yb73jaA(27X+M=JjB6mZbVa+6~?Jc1D0d2(+yLt3T3$~f42 zi{5tdB)FN{t%7T^VdLcJm=zR)$s4M)QgG05%G4$U((w|h58CTo?4J;3ucbrNp%TggvKxLGAigtT;uKJPoIS25sNCrO7XRD3_d<+e4$nm1JnwqvoMWMWF`cK#&K=f< zR7pY(vH(I_)dbJV*TWnpRX5Pxqk|0u-pl5F4> z;~Wr-Ou3LOMRj@g{QO~T3-^0;Vn@wEG|Q+xJ1qP*#L`%En6~B#KIZIuLT%I`b9I!J z%Tkg{V8|9Ki~Bau6v}B?HeAYLu4=;Xm%oh1+>urvS6kCr#fcgnC?g2SgsEKPRx|-EB0vjD$g?+t^QQz6IrIx zly#?)EzhS!X%7{X4dHK@O~gJbl|*q-bc90gpIpBiYgvcWEw2pgQdU-GXc3(eb~ZdC+GR^jbMQMCa~W(`8yarI^QO;y*j>0xh81C)5=;` z!jF#hD*7jqIk~pqUh0VR`X<^#!`MU({|Unv^RDf(?61V zGOcyItsYOg;hsV0nQcO+EThg&Tm0pkH{E7~t0=SlHJEod)GJuA;ZbAkMx&)_4De#^ zQ3?Z%RaD7XKJO2I%<#M4UtWW%@TJ9@{~$Y~zSfuIN#|zOS7`O)Y%2q;F|?}sSe#dY zr9%#CeGcrT8?4q89749xBL7r5o^S)|O-}o-Ab!Oln=otQL*@Ql^N23Z&ifPI+^ML3 zf8PafwVry@DLk^WMQ>2;#whcGH_)U}%cVmjH3GOSt1YqHyHf3Pc2kyCS?Jv7scw8y z5#MeN(A;3F?7RGh6;~}2a&1#$Ssk5mw?y$_vE+rhm*6-0Y7N&>#Aw=`=k?l3HOnd< z0ykGai(-hicByJXd@)Gwow{G(W3_V$s%havCTc0O?|1H53A+;1NT;3Q^O2j{$OX79 zi72iaAqN+xdenI-y2 zZF456nhT}IWDTcbQn!VF85d3N^%b+?iCg)gvpwD=m_LX#F5iRYVKPrO94Ceyc?DG`yv&&d&r@(>Dgm!k92VxnF5}M zjAeHeX7tez>%KKx7hA23rn5L7{DSZ;d1yektbesEWYMScj619$2n(hsK+r-mlgo-Y7pU_`wXtyV5pWy2Z|d$jnWD&9#S-CGX=r z%W?wC^1j`2O8r+uvy+$QIMr_XdxX`|=Kb>|;wOAlIG3!%eJ+S0}DUwZi#H&eVZ#M-LMt8sF76&!a31BKu`$lOc^1Sm6q4pp~)3Te+nr; zTL-itdG_8?`J6>txVm&r!#zzh?49%#u6`&?1XmA)ayAPdU_9JhPHNl?pm9|}tqbp2 zg2QI%RGC_9mv&@nMLCj0SRRpBzvZ7c699 zBxR%n&zZq7&29j$KhOF3G(i;J3Drl`)|{bk5uid@*hDKc z1@PP)nh9CxWP7dd=<@`-{{W*t(ivjY1KV>8YVPD1aPsgor>7d5C)&*Pf+b@^&r zLoRXn#JkYl_I6vB2-Z8Fz-mv%U0WgoV#JW7?H@U;VhP`mVIW|-(O_{m`_YAYq-z_46 z3LJ;v7=S*#@j;DE53ctd#fRWG;hyhY;ztzlu)0zHMwK5(hdS5D zdh(JnW5&J>SJyL|oMmSSirZuu%x#n@ov^ecfK-zK`Y#AizY8iEZmDBJu^K8e_&~=4oglqqYg2pp92VfAYGm+z`qzaVwh+YHVQNdh{4CP5 zQ>m}iV^9Oq{qMqtI@dlgYhK<3V{(*Tw%?i&B%#&*l)|#U zMAozAffbFXhK`hiL+==Fa4126>+=orV2K^$m}ajAxy~VS;73`xfknGzP_09Ah~TW! zrvCcjFYTHK2Eb;<>!mYr@8WRcfRb}(F46E$ZPA*$ZV6W+2_kRI`-6X(C#?S}VNIbK zuK5uE96KPMWATOyPDn2!+ss?|ei4Z|F4fg+xj>=d>o0yZ`ZXP7Z)ddX zwQ{bvY&XSZJqY%%nB&Xu6nxlH(=ZS2AlQo6>Nxoofn@Xvo`ETPeK3}!X%?Ijd(VBk(qxqtYx4+& z!W)pt+nuI=4K-1tHvyhvx^&7QwgG%dbWbnD5OMAw)x#Z`ZK#Rnb@tI`HE5!PTc5a?^1T zRQC8{B(nscTy%=}hZVXMnhqYk0~}Ri8%hEn2=O*?Ge6;eO@ClNVC?_AMxp9#E8H%` zoQ7>@>xK(;IGii1<5oMSWe0S_}Kpr?-0S zo?*)&c@2LKptMbU@_RUIT|DV;KV&WVj2-=`vls0s>52 zv`}1Wh9Y?X5-3}i%uINyLq`qSLatfcFGMN?lx5MzRy#3P2|ir19ouQjL@E)9kTf;7 zv$)v7E}Rc?I_|}gv%F=#&BmO2i&qeYU3?!+~UL9p^=e&%%m#d3M8 ztk?{uA$KWl-rPZrwwi8|uXz7mNy>@sNrX{2`a6)3@P@TE@N?rtMXj-LtzGG5sWZwU zwei`WCjb{R3_Uu}i^|?fa0!2$Do6;&9(Sapw>hJA3zG?I1AIL{F*>s#z{);C*Jf7N z<|(eoF3#2Jzm~Ub>08mF0G)gVfp>JJ^hUjlRNE~hP;PpmIyDb03z*4j9W)47E_!k+Lq`+!WbdM!4~DqG(e5D=kX%P`>Xv(+wWS%zaOv9f6)N_+Sy$fj@_bu<%L9RckZ z8vq>OWkp)O$g$c2!SklW`YqGQBfKEsJae1lPeE>@IU}sy$Fk5Z>9Ck1@KYT$v)yK1 zvaIyjwSOXFznAk-?DJBL>Rzh;{EE_hTg$K|5VaGhMl`KFk*C+n7wgOy(lBHa1`cZb z73f~&Fz#K9?*2^&4Rsqoouz;g^nP(wN~Y>!6761W98c$~;|#N-eyYj)fHvv_V%BCF zT}lkiQj_-xK-xi8P^Q{ww?nI zI&@UpPseK28~TaySXFHnmgbY7IyIE)pL)^dnvg?X@5;(_%MB)a>`Ih&8puzop#o3Y zegg97U$1FJ)~&mErPrVct<2D|kqRzYXsh}0lS4y8c7x{kO{@5o9-({1$)60XZ0$Tr zyW=*%MyV%UP4pGLNynTjWFg-l<=G6;1*mgj%zoV!!ucO;h++$49~M4kp=tI3$$or8 z(@1nD+}D*zur0YmRCA!FDeWDzI-8vL%PD>t9mgoSnk=li4jI3wLKH`n(LTxmCn)t_ zUo|s~c~{vA#Jh(siBFi4)2A$Cd`lZ$Xsa3>H@*E0{QY1qKan|VM+>SqSZWWmv_ESr z!v`Vea<$a9Ue7w1i;2%d}jWKvbc>-pFbNV$#V1!``sHE0++hx2Yz#s8N0n%vgCET z33KYK21MyzR&qFyAp&wm6RSvyr|8Kwa+0&9FJud0T4wM0^M}>XuWXj?9<6-Ry68-2 zo@7^8xA5SPuH@02hOC%L_(9HpM4_t(PT&(h8Vxf3X%s)pK?FAXZ8w`%ll_u5|l`$Ke-a z*e^p>`=U3e*@*DJo95ZI;>1%kdB(AMd|^iW8Op9ivk6tYMaA+$6K3Ebl*F2kQFRaE z+kYeDMF)9*LUY7x5yz3&$)fvSX8W%DUV!#ynl@W?vm6Ysc|%>q8+3KN7d_H$$wMMv z(@V*5|Hc)9YSpFmg94?{+(qsezgyRohtd>I4MdInL3W^swsftF&!bSO6G{*AFmRGd z&+hnA281gen%q1ET)Gy{TGm%p*!wbKB!=j`&^xe>jk#Xkovsy4;Onycm==D}JrX#j zE}EK9TUwR3GZ`E7qd9j+=V4`>S+ovDwi*Z+kmJ1UW9ag=)Vdft(|S8<>TJv#c(dkf z(B6*Um=Iid=Z4a3hyHlh9sg22HFCFkNxxyLdiCFV1!RlRh1s{}O1BfBTpRHl7%vU% z5W9&Ye0{2YAOb~HG5sMVS9R+lmrPCi>AC9mf$Hp4AFv$eKJ#6EB|_edhVt7A9)B>) zn3>t05CVNn>;PpXGd<%nB zCWh)i;e>jI@~l|E_2btDE)f;q>G9K0VCf_n)l9A~bv?I(xViw`vtEbNqr2^7$4ki_ zQ^1&D*N+>x42w;FTN8mx9yr967=lYcCv4c?&KPh+IiPClD#X!tEv5Y<2pjJ`!DzEo z&_#)@0O|xRq>;|+-ZsTA7)#JSx1}xcVWt%tnnyCmiv<|aHm~MC=!hel(%fmofIT1{c^Q#SG`4cxmzmF;x(l6ytpon$s{VAh5@S=&;nxGbcRtv z@*)*UP|o*B6Y|0|u6&Vvpmq8&swf#GiMA<`p4eZM;heHn8sn7UWKzP~mhzBo`x@na zW@n+_JYKy$>3i>E#_unl8k|4>TQ7v~`u6(Xd^B92ZM^%wW4f*J@uCVPm`{Yid)wZ6 zD%UoKw7!y$$gWNJW3H#Lr?eS5WJiX%gYnSX65g5z8Uw@ZKeF|qlK9o}uC~SB3JK;9gLWv+cBmK&vSu#6(9On>&iiKCgR7vXxjkv#B6)jFJL zs4|t{#1hLgMMRs3_7+4j>Gfx;#^_VwGMj%-w>SF8O2qp-AKTdqlip(CYyCJhnVr~I z$dgXOxr15a`p=v_6ptRa@Bge7WzAr3voItJnHP-&Hgh%#=qmR29oX*3ETd{N+wV!6 zV33y^xC2!BDp=0B;xEDSx-h zXmR}pt^Aw3UjBcmM5tmuAImd$ktTD(KZ9~Fk8`nJ#@L18EQJ2TEdBus9el4Q>9~xa zC{MgCbTdiKTmKoKZuI8NBds@^r;7;EfhgPiY264o!q((Bt=V@@YOFWQ9oc^$L33U} z$^YH1HV)0%=f$-tGBh_Tb+X^gM+upvsvfb=ONC}Bg=T4E0U$dfSR`4pe8XY`wHT1D zAAWGUD>U&f@c+afV|G4Kq8LM;)=ERQ!-owf88P?WgySvnt9zJz%sI3+^oZX5zc_oR z=t$eHZ8vs0wmRf64`@QtJ^aP6( z`sTbVvoOp?-h~cyMn`BCPFZnC!AEDlzX+kQe5=R-Xy}y>a3SZ_^uP z)ZzZJSGyqm)Rr?gsqU1{bh&`4j(G-xi+r9g!Nz4y+g|L_E@!q9`hj#hA)Ud{mRoJFMI{taQr&< z)REHf@ghETGBFv6<(H#6ya?77KPC|n&~}H*VQ9HBCQF#sq#vv`L6#U1nr5OlE7 zMdk!mkAZEDP~Gmpo(bhs8_hy~!L;2*ZWW1Vjv&CjOFMbANxLiaVYE92a$gc%y9_au zX`6L?s<5q!V;<5lXq`2FK&Th(aQ}KV36;m7^Y(V`@|>J64qw^)NfC{uBzjR^7CdUa zq@NP>wPC3={;=_iux3w9Mu9za3P}?k|57f12LQ}zPms9gvSnz;Lcu!=>J{gkv zMdnN&tN^7)79!yt?(<8I&QlAG{0CPVcHECBVL7@3q=t>y4$sUqok{I(q2e=r0RjyJ zuQcLj)8K=0zE@hOCE0ixJnoLn>e9Q%?v9td`qU&xuO)(YH)7B0fX~Bij7@_a8@cmQaoO2W0O-%?EYK-lqG70Ukg(|5Nq-=gLc#(#?aXnkIVt1>< zjOB1hgT*Te`fng4;xqloHmn4KmC(hVUDHTtsi?uH_dM49`ihIPUe{0ckK zUzp5K59g|!68Iak^xsjxaVM%f+}c>{8P*vXCczFn!UvXf`ncx&+`3&a^dXZ2^Y=Pi zW$FoBWH%J%-i5~5tIV!^b#!&z#|FF#4LrIX3eXSH_>jN0-V{~0g$|D;k$dpb%8qCi zMAokexu=~b^Z%^?7(?6l47ds!agkA!48P=@KYSA`J}vx90SGiM%F&F*mU`oVUdbx^ zynW)z0s`Lr-wHsj+yANn3>}GbiBs+(ZEtaXINU$qAr@g(my-i43B?aB$_*uJ4b?6~ z*-!AJ3(L|5P(LYEUb8Ofi0$hLnKv02Ccp~)d0cGI6w}97c_u!hjF|`ZGiEiE2~Fy~ zQ(|u=)%u9sII)%?xJr^*aNbF3R7gY&C^bbpN@jJ3t0n}DEVqUb_poCVRYVLfHozE* z%2EUZ2Kbe5$jH>s2}Tw4va-AYClV7Ppn6;eN7Fpynw(t5*xO890blmhKuiU@YUg)+ zseO#{w^|jA^0BBPF2il4iXH=7+LE3uLt{3RQpV~sxWufxW!VgRdR)tnnPU=TNOOBB ztn}_~)u^gA8rm%T8&%8JSqEzK!rK}N6$ol%e~BgeCnLJ!Of9V?7% zeoH6i7|5K&>ErufTT5nX3xffv+?ZMPZz`AR>qL$6kU4HPny~-tjDNKGE7hM7zX#|1 zB|2YP`5n)A174c)c?+TdAwiDY`iaZVI)I?JzsVq<+3Jv}jiqg^uC3W|5jP9QLN~o{ zkYRFCer$U9yH3^^^gqmnfLh>~pBDw`KgmNQT8g>0Dc)`+q*Ht$W`YaW6``%5q`?*Q zm#f)0fm7O?tyk#8F`_9#cH1zec69Cj9sJ!P$L;x~@5{OUtNuE{&u9h1z^}~gzdwCj zQFqb*ei5bZTtte{u~L7uu(dfZxqD_8=gl$L$MMYxWzAe(sC*otvnFX45wzN*jAy8s z$y0dhRbylQb%%F@sH?GQqpfy~fK{_CG2@};Mzh&@OOg%3S9i<{BpXYI_Xm4n0sBSj z)>t3Tz#INCgW<|3ekXr%4f|PftFY_!T}9RB<_g)Dog%&o#)Z=y1pwt$N4m3OlPIRfAc2@Z>x)W^%J&b9gSQXZKBm^on5vuVAPCQC<4g z2|PfZ^!;SFZm`Ti=2Ig^sj;IJ_gU&$t$K50%?(y5yUK=(&}#Oo)?&8MW20ZBGhqD~i_JEhF9d^wa0d2@4_Zud5OB zt-aD_MVkDV80n)`D3?DZWD3{B%!4Bq7`539UT=btX-ct@!1`4 z*qC*dmull}p+bT+7!uJ*YhisacHJB?pJ2mo+^c!0nyYw$HiCyH{;La%LoqOlv>S!pl#PB7Zeq|} z*Cc>;(qGdA8p92!cQL0{XG06LZpvS6+b1vS;i{A!wBc3$1cK?P!~MW_LN%VC?0f4^ zMY;>qUC&hd3k=v7Em9ALx^JZ0fJo0wr9xK|Yqg!B;_*H}d;l;iEUcIfRYiD+C_vIC zU9&V?tMB;>|5~gXdfAzP6GxTEJn^j3Vp^j~;IoOg#}bn}k+V;AscDO7HggZZ$zn%$ zQ?)NEvkCgG%tu{x-fU=8Pw9yJ(8JWTB3?7WsPK!C>79msuhKz=mkHB@c!Q~?w5&Fi z4i(Msq=_GZf+n9zgf@AD&*38TDr1gZuvA9l3{_%5_g)AjYj%eE`}Ju%h$C{THll@G zozNO`V|!X@!X}bM7aRE(Wr!k)+Y5zB}}Y3~(9+8ItMr6z=GVW=P8ag1Mwr z9QxHma>)fB?@F2@6(9U06U=gyvZBTuYG)nC8@^2!9&SoF{p=0CucP&+_VV1afk(hC zJ;+ZsgCN^Z-av}=n#pkGfdoC6KVPdQqeodG^%)lapeGJGAQ-L}%~BoJ_Wv(^@K5Y~ zZ#d;{?<`aO1=^hQFaqn$$QHaX_eb^LWf|sc^HiUdf918*|>9xFxSF`>-V=Xhhkr zz+2v!FgPzJZ4jlKw1rJM$rJ22%##}C`1et^nHv88a1P_hHW~uPl;(cz0=_vv`KM`s zVITFkA1&L?ED6R%#m*;mQFp@5(sbT3;Kwuy_NXxAZxX$!RS{d#+tEh{5+pZKyb7$> zYg_7;4|Q6d-fr(Zy^)E#sbk(fM6vwdoCAZWX9y>qL3X;cKG5rZMPCL7(1 z75iW%070-g|ImvJF{yQMg6Y*%#O=PUNoZqc0l&)1V zxI#aVUGXn)f%{G{^8YKb`@apNqTYW+cE~+1HUq5-iEz9hi3L&|3go-#%k}(3h#xoC z(llO08ULjj&5EagWo*t5VIv}o4v64JyK|a(<_dfscO8hq8%%tg3jH*5xqi?mA>t?; z3z@+IoqZOmuFK)5ZKtL_HX^uy#NS~>@H)NZw(52-(#;nHh8gkw2t*MF2DUd+5M>Ob znapk|9WyFGYj%o~9z#O`PDK8Qxesit=GjndzQVG)#?&=}@9~BD^t`@m&1~sxxze>7 z#eYe&yKT=C!jg3y(F#Vph?Owtml}DR|2^0_xE?E|0H!24LJ zJm83fJFhfq*1C%`K^OZq59UTb#mi;h2Nc=)zT@@Y?_+b~gKOf_kf3qXT0i&_Q%5AG z_F+HLq4QSc=0h3F75eukf!+<@?T%h6o*h#55>XWRaJB0PgGYpkH;evh>-xscXU@}L z4hB5+#c#OQKpXpd)dPg1F%`6aC=Av``w3nFQUW;bIJ-B(e1(+WE?`_1QX^!T*Q92tbS9!-R6;+0iFYO)fLW^4XqxLKF-n3U#18md z9fMJRV2mR!N-LwabvTSZm)f(@lrT5JMiAPiLF~zFc;n^7YXf<_UOVdn0b!(2E&*y| zAvK2Ph^Vguc#|%tjXZ|lmeI7D@}5~9gx!W=kg=>^s1*&nAnv+!uGZtpY3f}uG-`WU^xih!2bAYzswpRyus)SJeTnaoHwb_qmtCh176GFHm= z&`YYXkDE8@>s_oqMvR3o=d}H~$lsn=paa+nO385}Sot(F^Bnl9txPmR+Sh=vul$NA z#Z^S2293eIxqTI)QGB&u;JgoL`pIMB#7+L`iD5{@u~Z}{E{sUR$=bDph@ulGgQJXp z`sQw8BziMzb|_qzi(QFd4vkE@C9!CfWKVVzGa=2jQ`i^gL=PsEPDB+eieOCyO+6#j z1!JhlS~OtZg*bq+V24ifZJXEz!${PfP8>YUSx#$OC+xa^$hvODxAWMQvfpA~gD(tw zTyC2~B`OV;lCBSh&K$=h2wq+R=d%zgX0wv0j)#=e8T8zuk!bYcGZ_RL9waD6(iC+h zN+n%Bv8abOk`poYXYsT9#ZsJ=vT#pif(%(9S9oFy4w2Av&Kd(;VqLjV;T(xGRM}*h z_<|n90<*rGdS+r)&$jn6jKI)adqKVkjY1cRA+1m-5H zNanz_n-Q;MQ~-wk6S#sXc8j=aP79VgtlV3jMLoK7nm*tocuG))nLeL7GF~S`aj$h< z4^tec8|y#3I$~5fe2D*vwEYQj6rtKv;P%nZ{zTe_zPo{%{yHJTsG<>%{MWT#q{`9> z9P^5Iq7s!c5WJM1&{dvnZi4#<qv)YW+y7{FjIHh&v$#P_>RH+}rQF$^`__kzo|Q(Bg7d50yqo+?1wMb-Qnhe$Efg3sR)S{mj3 z&QKp4`O9ZJXvtw+lbw{fy(r^!D9Q8z9Pzs>Ay5j(Z`d=l*4pFj3I>G^>iWKck`kTs ztG(&B2!8xg?@a#A!;^s9L%Hi+NCfagr&L=N3Z@=$XKthOay%cpkU0!#}E-AHsYl z;QB)@=tF-kQA!>nwgOvMamBk`1i#}_3|RaPPdP|idhh=QPsvu8n?EZ5L+N5sEI9iT z(VGo9DFXc*G_c4Puq302^4(Nh9#nGmtm)mw;!h+F8?JWo8n9 zx~FNDkZe|+GaBjHT3^gD?7t#$OptcRnh4!KPg9R+=4ay1Z;!wK2~JT-xHJ^3hoC1) zN=$~>J{uvkEwg_)+m^QO#B1Tpm!)uh`kR-^FlheMzzQv0)c{n9YCW(*SpLewMa=$I ziRfDizx=>^pash>-+v2AP3yPY9f(^!_8J%WMs)NpA6OnLLfYyA=Ntx)dXoL|_HQzg zgO}WY+eA|;wC0BX+cx@oTxpZBea&7iXTR>(NpD9CG1EV_b1_E#e+k0#Xcoatkcg8V zH~Cg}eW#YjjW{FxKF3TeL32=i9nd1r-L}G-t3j{@9%!kEHL&T?wMed=h*WILbWLU-z{{x!bLyuyt;+&{DR?J+^Kof7B{dxHV$+0dr-a?}^4={)$Ay}s zr_5oNv=RwV`$(ofv(CwfjN6wZd18aj6Ri*FV*v{3#Sh5Ion?b9;JSrSX%`=S5w5Mf z84vS$#>>T_jcqP3p20S2Ix8=8So167WW)2H`#Jsj?sDd7PMDKWk)8CeVa#UsROS7h zMmssX?fS`&)uUXQK)NdN86CJggQnaO@KA3n5Y033Nw_(hr;)3tzAZK3p^!nXG=lR2 zC=@W!xms~v(o6bSx!1=is(DaaRsmZxVB9pP)Q4?lPn3JhgImSf&XIyzf0C23ozM69 zTm>)hwQb=(@YpZP%r~jSKdg0a%x`t@`+D#SRJq~0S+c0S?5A$0E^@LU7|JQg!47(# zPiN8c7)~8T2y_Q~1@8U8{Mgx%XYR|P(|mQpGPS}jpt4QJf){Oi>?bA20{JCJ1Oo56t?YRt^|uT{&kkyjzqEXLVBXD_g#d|-N&D{=s1D@5%RNL&}K%4Y1Q0&lZm;jz- zM(|KIH7l%YZR0+`ZOfr(d3U=47YAejgdZ`_AtZY4^i~qQN>lLtpt{sehFyVFR~Sj{ChNXdYD_k98Syx7shYJ@r`o*e29AF-|NLq_hsv9e< zX;!GYFp&jZWEw?~a2Q&x8_NO^N-!e6?!#B7wz{fTi$W}wh#G$m!jRCKx&ucZ<}TK( zHwqcvIX>c0-SGH@Q2Cw5)I~#x%Y)L%o+0l7L(=Cbe;19)RO)bXO~!l|13Fo!^9GiH zg1yKY4msS)MNdjegLxSSg(M9sMYDL*Xh1x3&qCA0fg&)usR6f&wqJzQy_rcV7s)^jG(r5>@!pZiKs^Pt{c&hTyqO5HD_AM9EO|Z0-Gf3;Te5PWU;I3n=uExpiqRobX1RWhG$+$;J> z4{Com-5Wh-vus*Ei)__CwodVTnQoO8D0fAoJ6*aPz`R4^Lm$CzK$CH%qvnYhm5;vT zf%_KU;**~FUK*s{7@I{Av*Q#u=~rLzPbs_fnyTV4cT5a0)JOE)4d^ZngI;M^ti5e% zi63@`HzW_aF;54rREwV_Du_6F0DxPttu~6Vct;5g_k+d+(O_p zE@s5*CYpioh;%{PvceiXVc%ET2}Gq`J-hrFe7C)xrc{{I^*`t5LdntY0G0fL76!Zr zR7o~q?58`Grr5CMqGQ@0mHy{smP7e=%Dv3C;Fw;m^Qa2V3qdtK7Q8=b$s9Jsw+6u;f{wlW>A^rAwt8f0C@{aq59YG2BU6>m19 zObhlZiSAhO6UKW&xL|##c-TX)kuj &;VSERxF^DcU@$p-%8W;6jV!6+lj_Oiw4p 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

5k)h6e51Y|7aOHf5_Wlc(p|xpN%I$6*Y3NrlP*I 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 z

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%0AQ^}=> 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 #5c6{1U4iL%Ef6juZTy3QAHu==uNTOHH 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