2026/05/12(火)古の絵師を少し追った

投稿日:

日々SNSやネットの奔流に流されていると、つい最近のことばかり追ってしまいがちなので、たまには古きを振り返ろうというコーナー。

この記事は思い付きで更新されるかもしれない。

グランスノア、パルテノン=ワッハーの人

アカウントやHPは残っているものの活動を休止されている模様…。

サイト名 URL ハンドルネーム
魔法星記 グランスノア (WebArchive) http://www5.airnet.ne.jp/kanan/ カナン
明日がんばる。 (WebArchive) http://www.alpha-net.ne.jp/users2/usarabi8/ 葵カナン
明日がんばる。 (WebArchive) http://ashitaganbaru.sakura.ne.jp/ 葵カナン
明日がんばる。 https://honya.uunyan.com/ 葵カナン
TINAMI http://www.tinami.com/creator/profile/29585 葵カナン
X https://x.com/KananAoi 迦樓羅
pixiv https://www.pixiv.net/users/12358 葵カナン
ニコニコ静画 https://seiga.nicovideo.jp/user/illust/218586 葵カナン
ピアプロ https://piapro.jp/ka_77 葵カナン
DLsite https://www.dlsite.com/maniax/circle/profile/=/maker_id/RG06671.html -

千郷&魚匠&御子神一家の人

千郷&魚匠&御子神一家の人の人。確証は薄いが千郷&魚匠&御子神一家|噂と評判[改] 過去ログ保管庫+にあることと、ブログとpixivにある最も古い絵に若干面影があるので、可能性がある。

サイト名 URL ハンドルネーム
Treasures (WebArchive) http://isweb16.infoseek.co.jp/art/n-rail/ NOVEMBER-RAIL
瞑想 (WebArchive) http://n-rail.hp.infoseek.co.jp/ RAIL
Luna Tic Road http://shikikami.blog83.fc2.com/ 守月史貴
かみしきのアレ。 http://kamishiki.net/ 守月史貴
pixiv https://www.pixiv.net/users/979621 守月史貴
X https://x.com/Kamizuki_S1 守月史貴
X https://x.com/Kamishiki_d1 かみしき

2026/05/11(月)Mastodon周りのメトリクス収集メモ

更新日:
投稿日:

確認環境

Env ver
nginx 1.26.1
Apache2 2.4.58
PostgreSQL 16.13
Redis 7.0.15
Mastodon 4.5.9
Prometheus 3.5.0

Apache2

# 取得
wget https://github.com/Lusitaniae/apache_exporter/releases/download/v1.0.12/apache_exporter-1.0.12.linux-amd64.tar.gz
tar xvfz apache_exporter-1.0.12.linux-amd64.tar.gz

# binを配置
sudo cp apache_exporter-1.0.12.linux-amd64/apache_exporter /usr/local/bin/
ls -la /usr/local/bin/ | grep apache_exporter

# デーモン作成
cat <<'EOF' | sudo tee /etc/systemd/system/apache_exporter.service
[Unit]
Description=Prometheus Apache Exporter
After=network.target

[Service]
Type=simple
User=prometheus
Group=prometheus
WorkingDirectory=/var/lib/prometheus
ExecStart=/usr/local/bin/apache_exporter --scrape_uri=http://[::]:ここにポート番号/server-status?auto
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# デーモンの有効化
sudo systemctl daemon-reload
sudo systemctl enable --now apache_exporter

# 起動確認
curl "http://[::1]:9117/metrics"

# 掃除
rm -Rf apache_exporter-1.0.12.linux-amd64 apache_exporter-1.0.12.linux-amd64.tar.gz

PostgreSQL

# 取得
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.19.1/postgres_exporter-0.19.1.linux-amd64.tar.gz
tar xvfz postgres_exporter-0.19.1.linux-amd64.tar.gz

# binを配置
sudo cp postgres_exporter-0.19.1.linux-amd64/postgres_exporter /usr/local/bin/
ls -la /usr/local/bin/ | grep postgres_exporter

# 監視ユーザーの作成
sudo -u postgres psql
CREATE USER postgres_exporter WITH PASSWORD 'ここにパスワード';
ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;
GRANT pg_monitor TO postgres_exporter;
quit

# 監視情報の作成
echo 'DATA_SOURCE_NAME="postgresql://postgres_exporter:ここにパスワード@localhost:5432/postgres?sslmode=disable"' | sudo tee /etc/default/postgres_exporter
sudo chown root:root /etc/default/postgres_exporter
sudo chmod 600 /etc/default/postgres_exporter

# デーモン作成
cat <<'EOF' | sudo tee /etc/systemd/system/postgres_exporter.service
[Unit]
Description=Prometheus PostgreSQL Exporter
After=network.target postgresql.service
Wants=postgresql.service

[Service]
Type=simple
User=prometheus
Group=prometheus
WorkingDirectory=/var/lib/prometheus
EnvironmentFile=/etc/default/postgres_exporter
ExecStart=/usr/local/bin/postgres_exporter \
    --web.listen-address=[::]:9187
Restart=on-failure
RestartSec=5
EOF

# デーモンの有効化
sudo systemctl daemon-reload
sudo systemctl enable --now postgres_exporter

# 起動確認
curl "http://[::1]:9187/metrics"

# 掃除
rm -Rf postgres_exporter-0.19.1.linux-amd64 postgres_exporter-0.19.1.linux-amd64.tar.gz

Redis

# 取得
wget https://github.com/oliver006/redis_exporter/releases/download/v1.82.0/redis_exporter-v1.82.0.linux-amd64.tar.gz
tar xvfz redis_exporter-v1.82.0.linux-amd64.tar.gz

# binを配置
sudo cp redis_exporter-v1.82.0.linux-amd64/redis_exporter /usr/local/bin/
ls -la /usr/local/bin/ | grep redis_exporter

# デーモン作成
cat <<'EOF' | sudo tee /etc/systemd/system/redis_exporter.service
[Unit]
Description=Prometheus Redis Exporter
After=network.target

[Service]
Type=simple
User=prometheus
Group=prometheus
WorkingDirectory=/var/lib/prometheus
ExecStart=/usr/local/bin/redis_exporter --redis.addr=redis://localhost:6379
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# デーモンの有効化
sudo systemctl daemon-reload
sudo systemctl enable --now redis_exporter

# 起動確認
curl "http://[::1]:9121/metrics"

# 掃除
rm -Rf redis_exporter-v1.82.0.linux-amd64 redis_exporter-v1.82.0.linux-amd64.tar.gz

Mastodonの組み込みExporter

  1. .env.productionに以下を追加
    MASTODON_PROMETHEUS_EXPORTER_ENABLED=true
    MASTODON_PROMETHEUS_EXPORTER_SIDEKIQ_DETAILED_METRICS=true
    
  2. デーモンを作る

    cat <<'EOF' | sudo tee /etc/systemd/system/mastodon-prometheus-exporter.service
    [Unit]
    Description=mastodon-prometheus-exporter
    After=network.target
    
    [Service]
    Type=simple
    User=mastodon
    WorkingDirectory=/home/mastodon/live
    Environment="RAILS_ENV=production"
    ExecStart=/home/mastodon/.rbenv/shims/bundle exec prometheus_exporter -b "::" -p 9394
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    # デーモンの有効化
    sudo systemctl daemon-reload
    sudo systemctl enable --now mastodon-prometheus-exporter
    
  3. 起動確認
    curl "http://[::1]:9394/metrics"
    # Streamingはv4でしかlistenしてないので[::1]は諦める
    curl "http://localhost:5001/metrics"
    

2026/05/11(月)自宅サーバーに雑に監視を入れた時にやったこと

更新日:
投稿日:

Ubuntuのネイティブ環境にPrometheusとGrafanaをIPv6スタックで導入したの続き。

ちまちまやってて記憶が飛びまくってるので抜け漏れがあるかもしれないが、吐き出しておかないと記憶が散逸するので、一度書き留めておく。

やったこと

LokiとFluentBitを入れてnginxのログをGrafanaで見れるようにする。

環境セットアップ

ここでは例示のためにLokiのlistenポートは9100とする。

Loki

確認環境
Env Ver
Ubuntu 24.04.3 LTS
Loki 3.5.9
インストール
  1. リリース一覧からLokiのバイナリを探す。CLIとかではなく、Loki単品を探す
  2. インストールコマンドを流す
    wget https://github.com/grafana/loki/releases/download/v3.5.9/loki_3.5.9_amd64.deb
    sudo dpkg -i loki_3.5.9_amd64.deb
    rm loki_3.5.9_amd64.deb
    
  3. 後述する設定を行う
  4. サービスの起動と確認をする
    sudo systemctl start loki
    systemctl status loki
    
設定

/etc/loki/config.ymlを開き、IPv6でListenし、ポート番号が9100となるようにする。中身はデフォルトの設定の改編。

auth_enabled: false

server:
  http_listen_port: 9100

common:
  ring:
    instance_addr: "::"
    kvstore:
      store: inmemory
  replication_factor: 1
  path_prefix: /tmp/loki

schema_config:
  configs:
  - from: 2020-05-15
    store: tsdb
    object_store: filesystem
    schema: v13
    index:
      prefix: index_
      period: 24h

storage_config:
  filesystem:
    directory: /tmp/loki/chunks
参考

FluentBit

確認環境
Env Ver
Ubuntu 24.04.3 LTS
FluentBit 4.2.2
インストール
  1. インストールコマンドを流す
    # FluentBitのGPGキーをキーリングに追加
    sudo sh -c 'curl https://packages.fluentbit.io/fluentbit.key | gpg --dearmor > /usr/share/keyrings/fluentbit-keyring.gpg'
    # OSコードの取得
    codename=$(grep -oP '(?<=VERSION_CODENAME=).*' /etc/os-release 2>/dev/null || lsb_release -cs 2>/dev/null)
    # OSコードをもとにAPTリストへ追加
    echo "deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] https://packages.fluentbit.io/ubuntu/$codename $codename main" | sudo tee /etc/apt/sources.list.d/fluent-bit.list
    # パッケージリストの更新
    sudo apt update
    # Fluent Bitのインストール
    sudo apt install fluent-bit
    
  2. 後述する設定を行う
  3. DB配置場所を作成し、サービスの起動と確認をする
    # DB配置場所の作成
    /var/lib/fluent-bit/
    # デーモンの開始
    sudo systemctl start fluent-bit
    # デーモンの起動確認
    systemctl status fluent-bit
    
設定

/etc/fluent-bit/fluent-bit.confを開きファイル末尾に以下を足す。

# nginx access log
[INPUT]
    name              tail
    path              /var/log/nginx/access.log
    parser            json
    tag               nginx.access
    db                /var/lib/fluent-bit/nginx-access.db
    refresh_interval  5

# nginx error log
[INPUT]
    name              tail
    path              /var/log/nginx/error.log
    tag               nginx.error
    db                /var/lib/fluent-bit/nginx-error.db
    refresh_interval  5

# Loki へ出力
[OUTPUT]
    name        loki
    match       nginx.*
    host        ::1
    port        9100
    labels      job=nginx, log_type=$TAG[1]
設定解説

今回の設定についての説明であって汎用性は考慮していない。

  • [INPUT], [OUTPUT]
    • 入力か出力か
  • name
  • path
    • 入力ファイルのパス
  • tag
    • 出力で引っ掛けるときの名前
  • db
    • ログファイルをどこまで読んだかを記録する
  • match
    • ここにマッチしたtagが出力対象になる
  • host
    • Lokiのホスト
  • port
    • Lokiのポート
  • labels
    • Grafanaで引っ掛けるときのラベル

nginx

確認環境
Env Ver
Ubuntu 24.04.3 LTS
nginx 1.26.1
設定

nginxの標準ログでは得られるものが少ないので色々見れるようにする。ついでにjson形式にする。

  1. /etc/nginx/nginx.confを開きログ設定を以下のようにする

        log_format main_json escape=json
        '{'
            '"time":"$time_iso8601",'
            '"remote_addr":"$remote_addr",'
            '"remote_port":"$remote_port",'
            '"request_id":"$request_id",'
            '"scheme":"$scheme",'
            '"server_name":"$server_name",'
            '"server_port":"$server_port",'
            '"request_method":"$request_method",'
            '"request_uri":"$request_uri",'
            '"server_protocol":"$server_protocol",'
            '"status":$status,'
            '"body_bytes_sent":$body_bytes_sent,'
            '"bytes_sent":$bytes_sent,'
            '"request_length":$request_length,'
            '"request_time":$request_time,'
            '"http_referer":"$http_referer",'
            '"http_user_agent":"$http_user_agent",'
            '"ssl_protocol":"$ssl_protocol",'
            '"ssl_cipher":"$ssl_cipher",'
            '"connection":"$connection",'
            '"connection_requests":"$connection_requests"'
        '}';
    
        access_log  /var/log/nginx/access.log  main_json;
    
  2. nginxを再起動する
    sudo systemctl restart nginx
    

Grafana

確認環境
Env Ver
Ubuntu 24.04.3 LTS
Grafana v12.1.1
  1. Grafanaのダッシュボードを開く
  2. 左のグローバルナビからConnections→Add new connectionでLokiを追加する
  3. URLをhttp://[::]:9100で指定する
  4. Explorerを開きLokiを選び「Go queryless」を押すとLokiの中身が見れる

2026/05/08(金)npmからpnpmに切り替えた

投稿日:

今までNode.jsのパッケージ管理は標準であるnpmを使っていたが、脆弱性の指摘や、高速性の観点からpnpmに切り替えることにした。

Yarnはなんかいけ好かない感じだったが、pnpmはnpmとコマンドの互換性があり、打ち辛いことを除いては使いやすい。公式ではエイリアスの設定を推奨しているが、エイリアスを前提とすると運用が辛いのとpnと言われても何のことやらわからないので私はそのまま使っている。ただただ打ち辛い。

互換性のあったコマンド

確認した限り次のコマンドは互換性があったため、基本的にnpmの頭にpを生やしてpnpmとするだけで問題ないのが便利だ。

  • npm start
  • npm t
  • npm i
  • npm i <pkg名>
  • npm i -D <pkg名>
  • npm un <pkg名>
  • npm version minor
  • npm version patch
  • npm publish
  • npx
    • pnpxで同じことができる

pnpm公式によるとパッケージの追加はpnpm add <pkg名>ないしpnpm add -D <pkg名>の様だが、npmの互換性のためなのかaddでなくiでも機能するようになっている。打鍵回数が減るのでありがたい。

便利なところ

インストールが爆速。グローバルインストールにエイリアスを持っているので極めて速い。

npm runrunが不要になった。Yarnもそうだがrunなしでscriptを走らせることができる。便利だ。

パッケージのアップデートがpnpm upで一括でできるようになった。npmの時はnpm-check-updatesでpackage.jsonを更新したのちnpmを走らせる必要があり面倒だったが、これは便利だ。

セキュリティについて

セキュリティが強いらしいが、今のところ実感はない。

拙作の@lycolia/ts-boilerplate-generator-cliではグローバルインストール時に一回警告が出たがpnpm approve-builds -gというコマンドを叩いてパッケージを選択したら以後は出なくなった。恐らくpostinstall関連だと思われるが、よくわかっていない。

このコマンドを叩かないとパスが通らず実行できないようだったが、パッケージをアップデートしても再度は出なかったため、特別な設定をしない限り何かしらの攻撃を受ける可能性はありそうだなと思った。

やったこと

自分が使っているリポジトリでは以下の対応を行った。

  1. CIなどのスクリプト(シェルスクリプトやpackage.jsonscripts、GitHub Actions Workflow)にあるnpmpnpmに、npm run xxxとしている箇所をpnpm xxxに、npxpnpxに置き換えた
  2. GitHub ActionsのWorkflowでpnpmを使えるようにした
    1. actions/setup-nodeの手前にpnpm/action-setupを追加し、actions/setup-nodecacheの指定をpnpmpnpm-lock.yamlに変更
         steps:
      -      - uses: actions/setup-node@v6
      +      - uses: actions/checkout@v6
      +      - uses: pnpm/action-setup@v4
      +        with:
      +          version: 10
      +      - uses: actions/setup-node@v6
               with:
               node-version-file: .nvmrc
      -          cache: npm
      -          cache-dependency-path: package-lock.json
      +          cache: pnpm
      +          cache-dependency-path: pnpm-lock.yaml
               registry-url: 'https://registry.npmjs.org'
      
    2. npmpnpmに、npxpnpxに置き換え
  3. 不要になったpackage-lock.jsonの削除

あとがき

結果としては打ち辛いこと以外満足している。

正直pnpmも登場した当初はYarn同様に、いけ好かないツールだなと思っていたが使ってみるとインストール速度が明らかに早く、npmの比較にならないこと(比べてないけど、たぶんYarnより早いと思う)や、なんかpnpmの勢いが強いので、流石にもうnpmは使えないなと判断して移行することにした。

pnpmが流行っている背景としては、恐らくYarn v3が酷評されているのと、連日のnpmパッケージの脆弱性騒動が背景にあるのだと思う。実際打ち辛いこと以外使いやすいし、勢いが出るのも納得という感じ。

ただpnpmが打ちづらすぎるのは何とかなってほしい。typoを狙ったpnmpみたいな悪意のあるパッケージが絶対にありそう。

てかv10のドキュメントではエイリアスの設定を推奨しているのに、v11からは削除されてて部分的にpnの記述が残ってるのはどうなのか…。ドキュメントの整備が追い付いていないのだろうか?

英語版でも同じなので何故削除したのかよくわからない。まぁエイリアス前提だとCIとかだるいし、そこが前提でないほうがドキュメント的にはよいと思うが…。

2026/05/08(金)Windows 11で1603エラーが出てJavaをインストールできなかった時にやったこと

確認環境

  • Windows 11 Pro 25H2 (OSビルド 26200.8246)
  • jre-8u491-windows-i586.exe

起きていたこと

全オペレーティング・システム用のJavaのダウンロードからWindows用のインストーラーをダウンロードし、インストールしようとしたところ1603エラーが出てインストールできなかった。

オンライン・オフラインどちらのインストーラーでもインストールに失敗した。

OSを再起動してもインストールできなかった。

既存のJavaインストールはない環境だった。

解決のためにやったこと

  1. イベントビューアを開きWindowsログ>Applicationでインストールログを探した
  2. MsiInstallerを見つけたので中身を見たところ、インストーラ本体(jre-8u491-windows-i586.exe)ではなく、jre1.8.0_491.msiが出ていた
    Windows インストーラー トランザクションを開始しています: C:\Users\hoge\AppData\LocalLow\Oracle\Java\jre1.8.0_491\jre1.8.0_491.msi。クライアント プロセス ID: 3160。
    
  3. インストーラーを蹴った時にウィンドウが消え再び出てくる挙動を見ていたので、恐らく別のインストーラーに切り替えるときに管理者特権などが正しく継承されていないのではないかと疑った
  4. C:\Users\hoge\AppData\LocalLow\Oracle\Java\jre1.8.0_491にアクセスしMSIを拾い上げ、直に実行することでインストールできた
  5. この後、動いてなかったVSCodeのPlantUML拡張が動作することを確認したため、問題なくインストールできたと考えている