Lokiのデータを永続化した

FluentBitでSystemdのログをLokiに送ってGrafanaで見れるようにし、ついでに設定をYAMLにしたでLokiのセットアップについて書いたが、Lokiのデータを/tmpに置いていたため、再起動などで揮発してログが見れなくなる問題があった。

そこで取り急ぎ永続化することにしたので、やったときのログを雑に残す。

確認環境

Env Ver
Ubuntu 26.04.1 LTS
Loki 3.5.9

前提

やったこと

  1. Lokiユーザーの作成と、永続化の保存先の作成
    sudo groupadd --system loki
    sudo usermod -g loki loki
    sudo chown -R loki:loki /var/lib/loki
    
  2. 現在のデータを永続化ストレージに移動
    sudo cp -a /tmp/loki/. /var/lib/loki/
    sudo chown -R loki:loki /var/lib/loki
    sudo du -sh /tmp/loki /var/lib/loki
    
  3. 保存先を永続化ストレージに変更
     common:
    -path_prefix: /tmp/loki/
    +path_prefix: /var/lib/loki/
    
  4. Lokiの再起動
    sudo systemctl restart loki
    

あとがき

以前バックリンク対応を入れたおかげで、こういう断片記事を書いても元記事からたどれるようになるので、今後は気軽にこういう断片をかけるようになると思うと便利だ。これまでは断片同士を探すのが地味に大変で、繋ぎ合わせるのに苦労していたが、それが少しは楽になると思っている。

しかし増えすぎるとノイズになるし、そのうちはやりWikiを作ったほうが良いようにも思える。幸いadiaryは元々Wikiとして使うことも想定されており、Lyndbaumでは差分や履歴管理にバックリンクまで入れているため、個人用Wikiとして使うには十分な機能を持ち合わせているので、実用性はあると思っている。

TODO管理にMantisBTを使うのをやめた

これまでチケット管理にMantisBTを使っていたがこれをやめた。

最大の理由は見ないからだ。プロジェクトを分けチケットを管理していようと、MantisBTのタブをひらっきぱなしにしていようと、私はMantisBTを滅多に見なかった。偶に思い出したように見て稀にタスクを消しこんでいたが、ほとんど役に立っていなかった。

そのためチケットについてはセルフホストを諦め、GitHubに移設した。そしてこれも恐らくあまり見ないと思う。何故なら見ないから。見なくても長期的に何かを残しておきたい用途では使えることが分かったので備忘録程度には使って行こうと思う。

個人的にタスク管理、TODO管理で最も役に立っているのはGoogleカレンダーで、Googleカレンダーにやることを書き、達成出来たら消し、できなかったら順延、どうにもならなかったら消すという運用が比較的よく回っている。これは時間を切ってアラームが出るようにすることで、存在に気が付くことができるためだ。

また昨今行っているLyndbaumの開発においてはテキストベースのTODOリストが元も活躍した。テキストにやりたいことを書き、やったら消す。これはチケットを作る手間も、開く手間も、面倒な管理画面を一覧する手間も何もなく管理がとても楽だった。端緒としては何故作り、どう消化し、なぜリジェクトしたかの履歴が残らないことだが、そんなことより物事が進むことのほうが何倍も重要だったため割り切ることにした。

情報を管理できるが何も進まないチケット管理より、情報を管理できないが物事を進められるTODO管理のほうがずっといい。最近はGitHub Issueも使っているが、コミットとIssue消化を結びつけるのが手間なので、正直イマイチに思っている。テキストベースならコミットを打ったら消せばいい。それに長期的に見た時にGitHubを手放すことを考えるとIssueに情報を残しても仕方がないのもある。

コミットに- resolved #123とか書いたところでGitHubを捨てたら何のことやらもうわかりはしないのである。なので私はそれはしないことにしていて、結果Issueとコミットが連動していない。よってPRを作ったときにIssueとコミットを突き合わせて消し込む作業が必要になり、手間だ。最近はこれを避けるために先にPRを作り、Issueを消化したらPRにメンションして閉じていて、この仕組みは上手く回っているが、やはり手間である。テキストファイルに追記したり消したりするほうが、ウンと楽だ。

Issue管理の利点は草が増やせることと、後で経緯を多少振り返りやすくなることくらいしかない。そもそもPRに経緯を書いているため、ほぼ役に立っていない。精々リジェクトしたときにリジェクトしたことが分かる程度だ。何故ならPRにはやったことは書いているが、やらなかったことは書いていないからだ。なぜやらなかったかはIssueに残せる。但し振り返る保証はないし、役に立つのかは今のところ不明である。

ひとまずMantisBTを消したことでPHPの世話が一点減ったのはありがたかった。うちは他にttrssをホストしていて、各テナントの仮想化をしていないため同一のDBMSや言語ランタイムを使うものが複数いると、これらのバージョンにまつわる競合が面倒だった。ttrssもどうにかしたいのだが、ここまで出来のいいRSSリーダーが他に見当たらないため一旦放置している。Pukiwikiもホストしているが、こいつが問題を起こすことはまずないと思うので深く気にしてはいない。

私は一応PHPerの端くれを名乗っているが、実のところPHPのことが特に好きなわけではなく、最近は忌むべく存在になりつつあるので、可能な範囲でPHPは排除したいと考えている。PHPは実行権限なくても動いてしまうのが厄介だし、ランタイム本体が汚染されとか、その利用者の多さゆえに攻撃の対象になりやすいのも懸念事項だし、後方互換性良く切り捨てるので私はあまり気に入っていない。

Lyndbaum v4.40アップデート

adiary置き換え計画始動から連なる、Lyndbaum v4.39アップデートの続き。

今回は管理機能周りの改善。このバージョンはさくらのレンタルサーバーに設置して新規にブログを作成できるところまで確認している。

ブログの初期セットアップの画面を作り、セットアップ前はほかの画面を開けなくした

ブログをセットアップする画面

Lyndbaumを使う人間が私以外にいるかという問題はさておき、以前マルチサイトやマルチユーザー機能を削除したためブログのセットアップ画面も作り直した。

元々は静的なindex.htmlを起点とする仕様だったが、それをやめて普通にCGI側に全部持たせ、ブログが未作成の状態では一切他の画面を開けないようにした。また従来はroot*という特権ユーザーが存在したが、偶に裏口を叩きに来る人がいるため、これは削除した。

当たり前ではあるがnoindex,nofllowにしてある。

メンテナンス画面の見た目を整えた

変更前 変更後
変更前のメンテナンス画面は殺風景で、閲覧者にログイン導線が分かりやすかったうえ、閲覧者にとって解りづらかった 変更後はある程度見た目を整え、ログインリンクを一目でわかりづらい場所に再配置した

変更前のメンテナンス画面は殺風景で、閲覧者にログイン導線が分かりやすかったうえ、閲覧者にとってどういう状態なのかわかりづらいように思ったので、多少わかりやすくし、ログインリンクに誤って入られないよう、一目見た時に解りづらい場所に移動させた。

当たり前ではあるがnoindex,nofllowにしてある。

システムチェックを、より意味があるものに変更した

変更前 変更後
変更前は意味がない情報や、出ていないものがあるなど活用しづらかった 変更後はバグ報告に活用できる情報のみにし、サーバーに対して攻撃可能な情報は削除した

変更前はバグ報告に添付されても意味がない情報や、動作確認の役に立つのか怪しい情報があった。そこで変更後は本質的に必要な情報だけに絞り、動作チェックもわかりやすくした。また実行パスなど表に出すと問題がある情報は項目から削除した。

あとがき

本体周りの改善は大分キリがいいところまで達成できたように思う。まだ管理画面の設定項目が妙なところにあって分かりづらいとかはあるものの、取り敢えずデータの引継ぎがなければ使える段階までは来たと思う。

データの引継ぎ周りはまだ検討できてないが、一旦ユーザーマニュアルなどを整備すれば他の人が最低限使うことができる状態にできたと思う。バージョンのキリもいいため、本体更新は一旦このあたりで蹴りをつけ、次はマニュアル周りの整備を進めていきたいと思う。

今回の修正をするにあたり、今まで理解を避けてきたスケルトン記法についても少しわかってきたので、これは収穫だった。一言でいうとスケルトン記法はPHP並みに凄い機能が盛られた概念で、第三者が作ったテーマの作りによっては任脆弱性を作りこめてしまうなど、DSLと呼ぶには大きすぎるものだった。しかしここは特に手を入れることはしない予定だ。

参考までに今回のPRも置いておく。

9月末辺りから今日に至るまでほとんど毎日更新している関係でGitHubの草が多く、また頻度の多さから色濃くなっている

しかしまぁ、我ながらよくもまぁこう毎日更新できるものだと感心する。GitHubの草はこれまでにない連続性と密度で生え散らかしているが、そろそろ落ち着いてくるのではないかと思っている。Claude Max x5の契約もそろそろ切れ、Proに戻る予定なので、物理的に勢いを保てなくのもある。

あとがきのあとがき

久々に出たあとがきのあとがき。

Lyndbaumの開発をしていてふと頭をよぎったのが静的サイトジェネレーターにしないのかというところだ。静的サイトジェネレーターならサプライチェーン攻撃以外は気にしなくてよくなるかもしれない。

これに対して明確な答えは今のところない。しかしCGIの利点としてSPAなどクライアントベースと比べた時にファーストビューが早い利点はあると思っている。例えば検索用のJSONを持つ必要がないし、Lyndbaumのように記事に対して真の全文検索[1]をする場合、クライアントサイドだけやるには記事全文をクライアントに渡す必要がある。これは非常に無駄だ。

このブログは現状15MB程度のテキストデータがあるがgzip圧縮したとしてもPageSpeed Insightsのスコアは下がるだろうし、遅延読み込みとか、なんかそういう面倒なことはとにかく考えたくないのだ。

また今の方式の利点として、良くも悪くも全部が見つけ都合になっているため、クライアントとサーバーサイドで世話を分けるとか、そういうことをしなくていいことや、全部が繋がっているので考えることが少なくて済むのは利点だと思う。半面でてがろぐに直近であった脆弱性対応を考えると、マイナーCMSでもそのあたりは考えないといけないと考えさせられるが、それはNode.jsで動いてるやつでもサプライチェーンマネジメントとして必要になってくることだとは思うし、なんというか考えていて疲れてきたので考えることは一旦やめることにした。

ひとまず壊れていない物を直すなということもあるし、今の執筆環境は非常に快適なので、これを保つという意味では十分いいことだと思う。ブログの管理もやりやすい。adiaryは非常によくできており、私はそこの中にあるちょっとした個人的不満を解消したかったのだ、そう思うことにした。

まぁ動的な作りなら将来的にユーザー管理機能を復活させてペイウォールを実装するなどの余地もあると思うので、そういう場合の備えとして考えることもできると思う。実は太古の昔にStripeの開発者アカウントをとっているので、このアカウントが今でも生きてれば作れる機能ではある。


  1. 検索用の辞書や索引などを用いず、無作為にgrep的な検索をすること ↩

Lyndbaum v4.39アップデート

adiary置き換え計画始動から連なる、Lyndbaum v4.37アップデートの続き。

バージョンが0.2増えた。今回は機能追加と機能改善。

PukiWikiの差分に相当する機能を追加

PukiWikiには前回更新時のスナップショットを持っておき、前回の状態と比較できる機能がある。これを追加した。

これにより更新したけど、やっぱ戻したいとか、前何書いたっけ?を確認したい時に対応できる。

PukiWikiの差分に相当する機能。差分を見たり、この時の状態に記事を戻せたりする

画面はこんな感じ。

リンクカードの更新を抑制

v4.36で導入したリンクカード記法には記事更新やブログ再構築時に毎回再取得が走る問題があり、相手サーバーの負荷になるうえ、単純に更新が重い問題があった。

これを解消するために再構築ではリンクカードの更新をオプションにし、記事更新時にはリンクカードを作らないようにした。どうしても作り直す場合は作り直したいカードを消して更新し、もう一度書き直すことで実現できる。

この方式はMastodonの作りを参考にしている。Mastodonでは一度投稿を消し適当なハッシュリンク付きで投稿し、削除し、ハッシュリンクなしのURLで再投稿することでリンクカードを無理やり更新できる裏技がある。この恐らくMastodonの開発者が想定しているとは思えない振る舞いを参考にし仕様を作った。システムでどうこうすると大変なので運用でカバー。

((注釈))記法の一覧を注釈を書いた見出しセクション内に展開するようにした

元々は大見出しごとに分かれていたが、((注釈))を書いた見出しの中に収めるようにした。こうしないと脚注と大きな差がなく、注釈としてあまり意味がないため。

画面表示に利用していたリポジトリURLが古かったのを修正

フッターに出ていたリポジトリURLがLyndbaum4のままだったので無印に改定した。参考までに過去のLyndbaumはLyndbaum0になっている。

あとがき

今回の対応によりIssueはだいぶ片付き、残りといえば直しても直さなくてもどうでもいいレベルの内容や、他の人が使えるようにする対応のようなものが中心になっている。

特に何もなければ昨今起きているLyndbaumアップデート記事の連打は今後減っていく、と思いたい。

そういえばリリースの版数でブランチバージョンを除いたバージョンを数えていたら64件になっていた。キリがいい。


現時点でのリリース一覧(v0.22.dev-1はブランチに見えるが、v0.22.0相当なので含んでいる)

リンク先はリリースページでなくPRかコミットハッシュにしている。

v4.39 / v4.38 / v4.37 / v4.36 / v4.35 / v4.34 / v4.33 / v4.32 / v4.31 / v4.30 / v4.29 / v4.28 / v4.27 / v4.26 / v4.25 / v4.24 / v4.23 / v4.22 / v4.21 / v4.20 / v4.19 / v4.18 / v4.17 / v4.16 / v4.15 / v4.14 / v4.13 / v4.12 / v4.11 / v4.10 / v4.09 / v4.08 / v4.7 / v4.6 / v4.5.1 / v4.5 / v4.4 / v0.43 / v0.42.0 / v0.41.0 / v0.40.0 / v0.30.0 / v0.29.0 / v0.28.0 / v0.27.0 / v0.26.0 / v0.25.0 / v0.24.0 / v0.23.0 / v0.22.dev-1 / v0.21.0 / v0.16.0 / v0.15.0 / v0.13.0 / v0.9.2 / v0.9.0 / v0.8.0 / v0.7.0 / v0.6.2 / v0.6.0 / v0.5.0 / v0.4.1 / v0.3.0 / v0.2.0 / v0.1.0


しかしadiaryを地味に改修している話からずいぶん遠いところまで来た感じがある…。

Lyndbaum v4.37アップデート

adiary置き換え計画始動から連なる、Lyndbaum v4.36アップデートの続き。一日に二度更新しているが、単に土曜の更新が日曜にずれ込んだ関係でこうなっているだけだと思う。たぶん。

今回は機能追加対応がメインだ。

ブログの画像の想定が正方形だったのをバナー想定にし、ブログの画像をRSSの画像に設定するようにした

表示の優先順もブログの画像があればブログの画像、ブログの画像がなければサイトアイコン、それもなければデフォルトアイコンを出すようにロジックを変えている。

この対応によりブログの画像はバナー、サイトアイコンはアイコンという使い分けができるようになった。そして何も設定していなければLyndbaumのロゴになる。

SSPのRSSを選んだ時にユーザーさんの興味をグングン引くような画像が出るようにしているところ

今回の対応の目的はSSP上でRSSにユーザーさんの好奇心を引き立てるような画像を設定可能にするのが主目的で、副次的にバナーをOGPとして出せることがある。サイトアイコンは正方形、バナーはそれ以外としてOGPを出し分けたい需要が私の中にあったのでそうしている。

v4.26でRSSを載せるようにした対応も伺か向けだったし、伺か向け対応を続けるCMS、いったい何者なのか…。

なおSSP以外のリーダーが<image>をどう解釈するかについては一切何ら考慮していない。何故ならそんなRSSリーダーを私が知らないからである。

FediverseのURLを入れた時にいい感じのカードを出せるようにした

[&URL]構文で出せるやつ。

変更前 変更後
変更前はテキストだけで味気ない 変更後はSNSのステータスカード風に出ている

Fediverseユーザーが開発しているCMSならFediverseのカードが出せないといかんでしょ!ということで対応したもの。Lycodonと末代、Misskey.ioでのみ動作確認している。MastodonとMisskey以外で使えるのかは不明だが一般的なActivityPubであれば対応可能なものだと見込んでいる。

下書き選択のタイトルにbyと入ってるのを消した

修正前は下書き選択のタイトルにbyと入っていた

修正前は下書き選択のタイトルにbyと入っていたが、これをなくした。v4.34で行った複数ユーザー機能の削除の残骸掃除。

Lyndbaumテーマで目次とただのリストの見分けがつけづらいのを分かりやすくした

変更前 変更後
変更前は単なるリストと見分けがつかない見た目 変更後はリストマーカーを消し、明示的に目次であることを示す見出しを付けた

更前は単なるリストと見分けがつかない見た目で、唯一の差は枠と背景色の有無であった。私は自分のブログを見ていてたまに混乱していた。

そこでリストマーカーを消し、明示的に目次であることを示す見出しを付けることで、錯誤しないように直してみた。目次の見出しについてOpusはCSS装飾を進めてきたが、文字が表示されてるのに選択できないのはキモいし、アクセシビリティ的にもよくないので本体のToC生成実装を直してHTML上に文字列を表示する要素を組み込んでもらった。

追従する目次のほうは特に直していない。ここは本文と明らかに別の位置にあるし、領域が狭く改行が起きるのでマーカーがないと目次のリストが読みづらい気がしたからだ。

IndexNow対応

待望のIndexNow対応!IndexNow対応は二年前に想起したものの面倒で対応をやめていた。

元々は優先度がかなり低いタスクだったが、Claude.aiのサイトでは検索エンジンにインデックスされてないサイトを読んでくれないため、送球にインデックスさせる必要性を感じ導入することにした。

体感ではBingは24時間以内にインデックスしてくれる感じがあったので、これまでは重要性を全く感じていなかったが、それはもう過去の話であってLLM大全盛期の今となっては24時間では遅く、より早いインデックスが求められると考えている。また副次効果としてYandexからのインデックスも期待できるようになる。

年齢確認済の解消文言が長すぎるのを短くした

LLMに書かせたメッセージは概して長いので仕方ないね。

あとがき

しかしまぁ最近見事なまでにLyndbaumのことしか書いていないし、更新も落ち着いてきた部分があるので、もっとブログらしいことを書いていきたい。下書きも地味に溜まってるし…。

とはいえ、直近のアップデートで微妙になった部分もあるので、そこも直す必要があるのだが、急ぐことでもないので、今後はもうちょいのんびりやっていきたいところだ…。というのは何度か過去にも言った気がするのだが、まぁ…w