AR ホームベーカリー

オイラはホームベーカリー!

物件選び2021

そろそろ10年目になる、今の賃貸マンションに不満があり引っ越しを検討している。 インターネット無料物件ってやつで、使っても居ないインターネット使用料が毎月引かれてしまっているからだ。

togetter.com

けどこういうのを見ると一種の賭けだよなあ、と思ったりする。

今の物件

コンセントに光端子引き込まれていたけど、そちらは共用設備に直結しているらしく、結局通常の工事が発生した。

といっても物件自体に NTT の回線は来ていたので、

  1. 光端子のパネルを外して
  2. 導通管からケーブル引き込んで
  3. 室内に設置したモデムに光ケーブル圧着したヤツを刺す

という感じ。

新築で入居時に「共用回線で速度出ないと困るので、個別で NTT の光回線引き込んでいいですか」と大家に聞いてダメ、と言われていた。 しかし、ある日突然「いいよ」と言われ、契約しかけてた別の部屋から乗り換えた記憶がある。

これ退去する時工事必要かどうかわからねんだよな。 たぶん居るとは思うんだけども。

それ以外の不満

住んでいて不満がアップグレードされた感じ。

  1. 最寄りの鉄道駅まで徒歩 15 分 1.代わりに JR と私鉄系 2 社が乗り入れている
  2. 一番近いスーパーまで徒歩 15 分
  3. ここ数年、生鮮食品がめちゃくちゃ高く、最近上がった酒税分アルコールも値上がりしているが、下がった発泡酒系は高いまま
  4. もうちょっと歩くと OK ストアとか業務スーパーという選択肢が出てくる
  5. 入居時の条件に「子供不可」と書いてあったが、大家夫妻に子供が出来たからかいつのまにか解禁されていて大合唱
  6. 壁がレオパレスと同じくらい薄く、隣の部屋の生活音やテレビ音が聞こえる
  7. 毎日ウォッチパーティー状態
  8. ワイの本を買う速度に、部屋の面積が追いつけない
  9. 泣く泣く電子書籍に移行しはじめた

という感じで、特に最後の 2 つが主に引っ越したい理由を締めつつある。

引越し先

23区東側にもどるかなあ、という気持ちになっている。 北側は公共交通機関が貧弱すぎて、たしかに家賃安くて広い物件確保できるんだけど、代替の交通手段を考えるとあんまり安くないな? という印象。

寝室とリビングが別れているのが理想だけど、クッソ広いワンルームを区切って使うのでもいいんだよなー。

何にしろ、個人事業主なのでまず審査を突破できないのではという日本特有の地獄よ。 オタクのやどかりあたりに相談するのがいいのかな。

RDS の T3/T2 Unlimited

突然 RDS で動いてる MySQL のメンテナンスやることになったけど、インスタンスタイプが db.t2.micro だったのだ! という顔シリーズ。

RDS の T3/T2 Unlimited って存在するの?

存在します。 しかし EC2 とはだいぶ趣が違います。

Amazon RDS、Amazon AuroraのT系インスタンスにも、CPUクレジットがあります。

aws.amazon.com

インスタンスタイプによって、あらかじめ動作が決まっているようです。

マネジメントコンソールなどから ( EC2 のように) Unlimited <-> Standard の変更はできません (まず表示項目がない) 。

また、CPU クレジットによる (使い切った時の) 動作は EC2 と同じです。

  • T3 (db.t3.)
    • Unlimited mode
    • CPU クレジットを使い切ると課金タイムに自動突入
  • T2 (db.t2.)
    • Standard mode
    • CPU クレジットを使い切るとパフォーマンスが (1割とかでしたっけ?) 制限される

突然こんなことを、なぜ……?

調べても EC2 の Unlimited 動作についての記述ばかりで、 RDS の T2インスタンスに関する記述が見つからんかったからです。 T3 は RDS の料金ページ内 T3 の CPU クレジット に申し訳程度に書いてあったんですけどね。

Amazon RDS の T3 DB インスタンスは Unlimited モードで実行されるので、連続する 24 時間での平均 CPU 使用率がインスタンスのベースラインを超えた場合に追加料金が発生します。

aws.amazon.com

英語ヘルプ側に unlimited mode enabling (無制限モードの有効化について) という項目あったんですが、 EC2 にしか言及してないのでそういうことなのでしょう。

You can check whether your burstable performance instance is configured as unlimited or standard using the Amazon EC2 console or the AWS CLI. (ワイ訳:Amazon EC2 (マネジメント) コンソール、または AWS CLI を使って、バースト可能なパフォーマンスインスタンスが無制限または標準として設定されているかどうかを確認できます。)

docs.aws.amazon.com

結論

政治的都合でインスタンス動作の変更できないからめちゃめちゃ作業したくない……重いクエリたくさん動かすから確実に詰まってインスタンス障害になるよぉ。

sidekiq のロギング

capistrano-sidekiq でインストールされる systemd 制御ファイル入れた時のロギングについて、CentOS7 あたりだと対応できないので、その対応について。

何が問題なのか

このあたりで書いた問題ですね。

donbulinux.hatenablog.jp

syslog を利用する

append による追記処理が利用できないので、 syslog に流して logrotate で処理するよう設定します。

変更したら daemon-reload してから sudo systemctl restart sydekiq しておいてください。

systemd ファイルを修正

sidekiq:install タスクを利用していると、 /etc/systemd/system/sidekiq.service に標準ファイルが設置されるので、以下のように変更します。

-StandardOutput=append:/var/www/example/shared/log/sidekiq.log
-StandardError=append:/var/www/example/shared/log/sidekiq.error.log
+StandardOutput=syslog
+StandardError=syslog

# これは標準記述されているままにしておく
SyslogIdentifier=sidekiq

syslog を設定する

/var/log/messages 見てるとわかると思うのですが、ログ位置行ごとに識別子のようなものが付与されていると思います。 これが SyslogIdentifier で指定できるヤツです。

特定の識別子を持つログは、指定したファイルに書き出すように設定します。

ちなみに syslog と連呼していますが、 RHEL(CentOS) 7 以降は rsyslog という名前になっています。 /etc/rsyslog.d/ 以下に .conf ファイルを設置すると読み込むようになるので、そちらにファイル設置します。

設置後は rsyslog の再起動を行って設定ファイルを読み込ませておきます。

sudo vi /etc/rsyslog.d/sidekiq.conf
sudo mkdir -p /var/log/sidekiq/
# ec2-user 権限で動かしているのでログ出力先もそのようにしています、Rails アプリを動かすユーザに合わせて変更してください
sudo chown ec2-user:ec2-user /var/log/sidekiq/
sudo systemctl restart rsyslog

/etc/rsyslog.d/sidekiq.conf

if $programname == 'sidekiq' then /var/log/sidekiq/sidekiq.log
& stop

logrotate を設定する

このままだと /var/log/sidekiq/sidekiq.log が肥大化するので、ローテートするようにします。

以下の logrotate 用設定ファイルは、だいたいこのような感じです。

  • ec2-user ユーザの 0644 (-rw-rw-r--) でファイルを処理
  • 日毎にローテート
  • 30 世代保持
  • 圧縮する
  • sidekiq.log-20210711 のように日付を付与する
  • 空ファイルならローテートをスキップする
  • 圧縮する対象は 3 世代目から (当日と前日にあたる 2 世代までは生ファイルとなる)
  • ローテート時ファイルポインタを開放しない

logrotate はデーモンではなく cron で発火するので、ファイル設置したらそこで終わりです。

/etc/logrotate.d/sidekiq

/var/log/sidekiq/sidekiq.log {
  su ec2-user ec2-user
  daily
  rotate 30
  compress
  dateext
  missingok
  notifempty
  sharedscripts
  delaycompress
  create 0664 ec2-user ec2-user
  copytruncate
}

sidekiq のログ再オープンは USR2 シグナル、ではありません!

どこもかしこも USR2 シグナルを送信しろ、と書いてあったのですが、最初に公式ドキュメントを読んでいたので記述が違って「ああーん?」となったやつ。

qiita.com

こちらにわかりやすく書いてあるのですが、公式もおそらく「ログドライバってやつがあるんだからそっちを使え、俺はもう面倒を見ねえ」って事だと思います。

とはいえ金払う有償版? だと USR2 で従来どおりの動作らしいとのことなので、まあハイ、という気持ちになってしまう。

ジョブの流入カットして、おそらく処理が終わるであろうタイミングでプロセス止めてファイルローテートして新規再開、はたしかに理想的なのですが、今回自分が導入した環境は以下のような状態でした。

  • 短時間 (< 60s)で終了するキュー
    • メール送信など
  • 長時間 (> 60s) 必要なキュー

長時間のキューが入ってるタイミングだと事故る、かつ sidekiq はたしか実行途中のキューが存在すると、最後まで終了しない限りプロセス再起動で処理済みのキューも再実行する、とかだった気がします。

ソースどこだったか忘れたんですが、マー実際発生しそうだし発生するとクレームボンバーでヤバいな、という感じだったので「それならログ欠ける方がマシだろ、 Rails 側の production.log にも一応履歴出てるはずだし」という判断で copytruncate しています。

環境に応じて、としか言えないのですが、今の所 copytruncate で致命的にログがぶっ壊れたり取りこぼしした事ないので、おそらく大丈夫じゃないかなあ、と考えています。

参考

qiita.com

netstat のルーティング出力が macOS 11.3 以前で違うっぽい

VPN 接続がうまくいかない、という話で OpenVPN 側のプロセス追ったりしていた際に気づきました。

ちなみにその VPN 接続がうまくいかない件は、macOS を再起動したら治ったそうです。 Windows と比べてあまり再起動必要ないと言われますが、何かあったらマー再起動なりが安牌ですね。

ルーティング情報の出力

macOS 環境では netstat -rn で表示することができます。

macOS 11.3

user@localhost ~ $ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.0.1        UGScg          en0

# snip #

(たぶん) macOS 11.3 以前

user@localhost ~ $ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc            0        0     en0 

# snip #

Flags 出力が違う

UGSc はともかくとして、 UGScg とは? って感じですね。 ググっても G が代わりに表示されるので謎。 というわけでこういう時は man netstat ですね、確認してみましょう。

user@localhost ~ $ man netstat

# snip #

     1       RTF_PROTO1       Protocol specific routing flag #1
     2       RTF_PROTO2       Protocol specific routing flag #2
     3       RTF_PROTO3       Protocol specific routing flag #3
     B       RTF_BLACKHOLE    Just discard packets (during updates)
     b       RTF_BROADCAST    The route represents a broadcast address
     C       RTF_CLONING      Generate new routes on use
     c       RTF_PRCLONING    Protocol-specified generate new routes on use
     D       RTF_DYNAMIC      Created dynamically (by redirect)
     G       RTF_GATEWAY      Destination requires forwarding by intermediary
     H       RTF_HOST         Host entry (net otherwise)
     I       RTF_IFSCOPE      Route is associated with an interface scope
     i       RTF_IFREF        Route is holding a reference to the interface
     L       RTF_LLINFO       Valid protocol to link address translation
     M       RTF_MODIFIED     Modified dynamically (by redirect)
     m       RTF_MULTICAST    The route represents a multicast address
     R       RTF_REJECT       Host or net unreachable
     r       RTF_ROUTER       Host is a default router
     S       RTF_STATIC       Manually added
     U       RTF_UP           Route usable
     W       RTF_WASCLONED    Route was generated as a result of cloning
     X       RTF_XRESOLVE     External daemon translates proto to link address
     Y       RTF_PROXY        Proxying; cloned routes will not be scoped
     g       RTF_GLOBAL       Route to a destination of the global internet (policy hint)

# snip #

こちらですね。

g RTF_GLOBAL Route to a destination of the global internet (policy hint)

へぇーっ、グローバルに出てる経路を明示してくれてるのか? こんなフラグあったっけ。

しらべるマン

github.com

and I noticed there is a bunch of new routing flags that are being actively used starting with macOS 11.3

(ワイ訳:macOS 11.3 では、新しいルーティングフラグが積極的に利用されている)

とのことなので、新規に追加されたフラグのようです。 たしかに意味がわかると、この g フラグは便利ですね。

参考

qiita.com www.ibm.com

TeraStation の E10 エラー

週明け作業の確認に、休日オフィスに出たら TeraStation の ERROR ランプが赤く光っててオゲーッ!

E10: UPS で駆動しています

www.buffalo.jp

つまりどうすりゃいいんじゃ? という所がさっぱりわからないんだけど、電源喪失 -> 復旧しているなら、再起動すれば解消するってことか? と当たりをつけて再起動したら、無事 ERROR ランプ点灯が消えました。

接続している UPS 自体はバッテリー 100% になっていたので、実際に UPS で駆動していたわけではなく、TeraStation が電源見失っただけか……? という感じでよくわからない事象でした。 直近でオフィス入ってるビルの全体メンテナンスもなかったし、なんだろうなこれ。

Vagrant で /usr/sbin/rcvboxadd setup

まーたいつもの VirtualBoxVagrant のアップデートで vagrant ディレクトリがマウントできないやつですよ。

これ毎回何かしらコケるし、天下の Vagrant 様の力でなんとかならんのか。

続きを読む

WiFi の DTIM とは

こういうことらしい。

xtech.nikkei.com

ルーターの詳細設定にあったんだけど、全然しらなくて「へぇっ」ってなった。WiFi わりといまどきの機能だし、絶対時間で処理していると思ったのでポーリング間隔なのは知らなかったなあ。