パスワードを忘れた? アカウント作成

mishimaさんのトモダチの日記みんなの日記も見てね。 ログインするとコメント表示数や表示方法をカスタマイズできるのを知っていますか?

13674459 journal
モニター

mishimaの日記: cgroupのIO帯域制限と性能監視 2

日記 by mishima

弊社のサーバ運用ポリシーに変更があり、全Linuxサーバでウィルススキャンソフトによる全ファイルのフルスキャンが基本となった。
そのこと自体は問題ないのだけど(rootkit検出じゃなくてウィルススキャン、というところにやる意味あんのかという気がしないのではないけど、自分の管理している部分はともかくとして他のサーバ管理者の水準が怪しい気もするのでやらないよりはやったほうがいいと思う)、ふつうにスキャンを実施すると30分程度は負荷の高い状況になる。

ウィルススキャンというのは基本的に大量のIOを発行する処理で、放っておくとディスクのIO帯域を使い切ってしまう。その間に本来のサーバの業務が発生し、それに関連するディスクIOが発行された場合、業務側にそれなりの遅延が発生する。

これを避けるため、cgroup によるIO帯域の制限を入れてみた。この方法だとウィルススキャン中でも業務側の遅延があまり悪化せず、いい方法だと思ったのだけれど…欠点が一つあって、見かけ上CPU負荷が100%になってしまう。

cgroup による IO 帯域制限に引っかかったプロセスはIO待ち状態になるのだけど、CPU統計情報では「IO待ち状態のプロセスが存在している=IO待ち時間」としてカウントされてしまう。そのため、実際にはディスクIOの帯域に余裕があるにもかかわらずCPU使用率100%、うちIO待ち時間が95%…みたいな状態になる。気が付いてみると当たり前といえば当たり前なんだけど、これがよくあるCPU性能監視と相性が悪く、一般的な監視ツールの設定だけでは本当の高負荷との区別が難しい。

何かいい方法がないものだろうか。

13667880 journal
日記

mishimaの日記: grep -T オプションの仕様変更

日記 by mishima

grep-2.20の時点では、「grep -H -T キーワード ファイル名」で実行すると

"ファイル名" TAB(\x09) BS(\x08) ":" ヒットした内容

というフォーマットで表示されていた。これが grep-2.27になると

"ファイル名" ":" TAB(\x09) ヒットした内容

というフォーマットに変わる。

バッチ等で修正が必要な場所が地味に多いぞこれ…

13630796 journal
日記

mishimaの日記: 俺はもうべからず集を作らないといけないのかも知れない 35

日記 by mishima

「(OS起動直後はいろんなサービスが準備中だったりするから)OS起動後5分待ってから処理するようにしてね」
と要件に書いて委託したソースコードがこんな処理になって帰ってきた:

                                TimeSpan ReleaseTime = new TimeSpan(0, 5, 0);
                                DateTime DelayTime = DateTime.Now + ReleaseTime;
                                while (DelayTime > DateTime.Now)
                                { }

コメントには堂々と「指定した時間待機させるにはこれしかない」と書いてあるわけですよ。
ぐぬぬ。

13609639 journal
日記

mishimaの日記: ansible 2.5.3 is broken

日記 by mishima

synchronize モジュールが使えなくなってる。
調べてみたら既に報告済み https://github.com/ansible/ansible/issues/40551 で devel ブランチでは修正済みのようだけど…

うーん、こんなコアなモジュールが動かなくなるような変更が 2.5.2 → 2.5.3 で入っちゃうところで、 ansible の開発体制への不安感がある。枯れるのはまだまだ先のようだ。

13412191 journal
日記

mishimaの日記: Grafanaに日本語のダッシュボード名 3

日記 by mishima

Grafanaでダッシュボードを作成すると、そのダッシュボードに対応するURLが(共有とかの目的のために)自動的に生成される仕組みがある。たとえば ABCD とかいう名前のダッシュボードなら /grafana/dashboard/db/abcd というURLになるという寸法。

ところで、ここでダッシュボード名に日本語を付けると、非ASCIIコード部分がなんか適当に変換されるのね。

日本語_にほんご

ri-ben-yu-_nihongo

ひらがな部分はヘボン式に、漢字部分はピンインになってるっぽい。
この読みの情報はどこから持ってきているんだろう。
変換後のURLの予想が付かない(予測がめんどくさい)仕様だなぁ…

13411104 journal
日記

mishimaの日記: Linuxの無線LAN設定について 4

日記 by mishima

自宅の部屋の一部はAPからの無線LANの電波が届かない。
仕方がないのでアンテナのでかいUSBの無線LANデバイスを買ってきてみた(それまではAPとして使っているPC内蔵の無線LANを使用)。
あとで忘れそうなので備忘録として設定方法をメモっておく。

1. 買ってきたのは WI-U2-433DHP。ひとまずLinux PCに差し込んでみたけど認識されない。ぐぐると RTL8821 というチップを使っているらしく、Github にドライバが有るらしいことがわかる。RTL8812 という紛らわしいチップがあって、これと同じドライバで動くらしい。

2. この手のドライバをぶっこむときは、最近のお作法としては DKMS を使うのがいいらしい。まず /usr/src 以下に、「ドライバ名-バージョン番号」のフォーマットでソースを置く。
こんな感じ:
# git clone https://github.com/diederikdehaas/rtl8812AU.git /usr/src/diederikdehaas_rtl8812AU-4.3.22
(rtl8812auのドライバは色んな人が保守してるみたい。diederikdehaas という人のが一番良く保守されているようだ。あとでどのメンテナのソースを入れたのかわかりやすいようにドライバの名前にメンテナの名前を入れておく。)

3. dkms に組み込む。とりあえず次のコマンド一発でよい:
# dkms install diederikdehaas_8812au/4.3.22
うまくいかない場合は削除すればよい:
# dkms remove diederikdehaas_8812au/4.3.22 --all
現在の dkms の状態は次のようにすればわかる:
# dkms status

4. ビルド中にエラーが発生。ログが出てるようなので調べたら、なんか未定義の関数 allow_signal を呼んでいるような。インクルード漏れだろうと高をくくって osdep_service.h に追記:
#include <linux/signal.h>
#include <linux/sched/signal.h>

5. ビルドはうまくいってカーネルに組み込めるようになったが、やっぱりデバイスを認識しない。lsusb で ID を調べて、該当する ID がソース中にあるかどうか調べると、やっぱりない。usb_intf.c に列挙すればいいみたいなので追加してみる:
{USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */

6. iwconfig で認識するようになったので hostapd の設定をしてみるが、"Could not select hw_mode and channel" などというエラーが出る。これもぐぐってみると hostapd.conf の hw_mode=a という部分がダメっぽい。hw_mode=g に変更する。

7. APとして無事構築完了。電波もかなり強くなって、自宅のどこでも利用できるようになった。

13185004 journal
日記

mishimaの日記: fluentd の forest plugin を Time slice で使用するとfluentd再起動時にログが消失する

日記 by mishima

https://github.com/tagomoris/fluent-plugin-forest

ここに以下のような設定例があるんだけど

<match service.*>
    @type forest
    subtype file
    remove_prefix service
    <template>
        time_slice_format %Y%m%d%H
        compress gz
        path /var/log/${tag}.*.log
    </template>
</match>

このような設定をしている場合、以下の条件が重なるとログが消失(バッファ内に格納されたまま吐き出されない)する。

* 再起動後、
* 同一 Time slice の期間内に、
* 同一タグのログが入力されない

forest プラグインは新規のタグを見つけるたびにスレッドを作成し、そのスレッドがそのタグについてのバッファファイルも管理するような構成になっている。再起動するとスレッドが全部停止するが、このときバッファファイルのことも忘れてしまうので、Time slice の期間が終わってもバッファファイルの書き出しが発生しない。

対策として flush_at_shutdown true を追記しておくことが必要(停止時にバッファファイルを書き出してくれる)。

11032381 journal
日記

mishimaの日記: Redmine のデータ移設(SQLite → MySQL)

日記 by mishima

Debian的に正しい手法(パッケージで提供されているファイルを変更しない)で、データをダンプする手順がわかりにくかったので、きちんと書き留めておく。

1. yaml_db をインストール

  # aptitude install ruby-yaml-db

2. 適当なディレクトリに redmine をコピー

%  rsync -aSvx /usr/share/redmine/ /tmp/redmine/

3. その中に yaml_db を入れる

  % rsync -aSvx /usr/lib/ruby/vendor_ruby/tasks/ /tmp/redmine/lib/tasks/.

4. ダンプする。

  % cd  /tmp/redmine
  % rake RAILS_ENV=production -r yaml_db db:dump

5. 移行先のデータベース情報に書き換える。

  # vi /etc/redmine/default/database.yml
 
production:
  adapter: mysql
  database: redmine_default
  host: localhost
  port:
  username: redmine_default
  password: XXXXXXXXX
  encoding: utf8

6. データをロードする。

  % rake RAILS_ENV=production -r yaml_db db:load

「Rake には tasks という概念がある。それは lib/tasks の下に格納される」
「yaml_db はデータダンプの tasks である db:dump を提供する。それは単独では機能せず、 db:schema:dump を提供する他の tasks を組み合わせて使う」
「Redmineのホームディレクトリには Rakefile があって、いろいろな tasks を提供する。その中に db:schema:dump も含まれている」

このあたりの前提条件がわからないと、何をやったらいいかわからないよ〜

10007348 journal
日記

mishimaの日記: VMware上の仮想サーバでfluentdが使えない件 4

日記 by mishima

http://d.hatena.ne.jp/oranie/20121107/1352298768
VMWareのバグで、ちいさなUDPパケットが破棄されてしまうんだと。なんだこのバグ…

fluentd では死活確認のため、1バイトの内容("\0")のパケットを送り合ってるんだけど、これが欠落しているのが原因。ソースコードを書き換えてパケットの中身を増やせば対応可能。うちでは12バイト以上にすればパケットの受信が確認できた。

2013-09-11 08:51:11 +0900 [warn]: temporarily failed to flush the buffer. next_retry=2013-09-11 08:51:12 +0900 error_class="RuntimeError" error="no nodes are available" instance=159840520

こんなエラーメッセージが出ているのがポイント。
あまりこのバグに引っかかる人は多くないような気がするが、一度引っかかると原因を探すのがなかなかむずかしい(アプリ側の設定を疑ってしまう)のでとりあえず情報を拡散してみる

9818418 journal
日記

mishimaの日記: 一般ユーザ権限でGemをインストールする

日記 by mishima

次のことをやればおk

mkdir ~/gems
cat >>~/.zshenv <<'EOF'
########
########
########
export GEM_HOME=$HOME/gems
export GEM_PATH=$HOME/gems
export PATH=$PATH:$HOME/gems/bin
EOF

zsh 使ってない?しらんがな

typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...