JJUG CCC 2024 Fall 2024-10-27 https://jjug.doorkeeper.jp/events/177443
JJUG CCC 2024 Fall 2024-10-27 https://jjug.doorkeeper.jp/events/177443
アプリのログを/dev/nullに流してしまった。すでに流れてしまったものは取り戻せないが、以降のログをなんとかプロセスを生かしたままファイルに出力させたいという場合はよくある。 gdbを使えばそれが可能となる。 追記: 書いた後ですでに同じような記事があるのを見つけてしまったが若干やり方が異なっていたりしたのでそのまま公開。 準備 1秒毎にHelloを出力するだけのプログラム。 #include <iostream> #include <unistd.h> int main(int argc, char *argv[]) { while(true) { std::cout << "Hello" << std::endl; sleep(1); } return 0; }
複数台のサーバーやクラウド環境を組み合わせてのサービス運用においては、ログの収集方法に工夫が必要となる。こういった場合に有用なのが、さまざまなログの収集手段を提供するfluentdだ。今回はfluentdのアーキテクチャやそのインストール/設定方法、基礎的な設定例などを紹介する。 さまざまな方法でログを収集できるfluentd 今回紹介するfluentdは、Treasure Dataが開発するログ収集管理ツールだ(図1)。オープンソースで公開されており、Linuxや各種UNIXで動作する。 図1 fluentdのWebサイト ログ収集のためのソフトウェアとしてはsyslogdやsyslog-ngなどが有名だが、fluentdがこれらと異なる点としては、以下が挙げられる。 さまざまなソースからのイベントをさまざまな媒体に出力できる fluentdの大きな特徴としては、ログの収集方法やログの記
Dockerではコンテナ内で実行されたプロセスの出力をログとして記録しておく機能が用意されている。このログ出力機構では、さまざまなログ記録システムにログを転送することが可能であり、複数の異なるホストで稼動しているコンテナのログを1つのマシンに集約する、といったこともできる。今回はこのログ機能について紹介する。 DockerのLogging Driver機構 Dockerコンテナでは、コンテナ作成後にコンテナ内のファイルシステムに書き込まれたデータはコンテナの削除時に一緒に破棄されてしまう。そのため、各種ログやエラーメッセージ出力などの保存しておきたい情報はコンテナ外に出力して保存しておく必要がある。Dockerではこれを支援する機能の1つとして、ログを外部のログ記録ソフトウェアに転送する機構が用意されている。これを利用することで、多数のコンテナが稼動するような環境や、複数のマシンを組み合わ
概要 dockerを本番運用する際にログの扱いに悩んだので情報をまとめてみました。 環境 docker v1.12.1 コンテナのログは何処に渡すべきか 主に以下の3通りになると思います。 コンテナ内に保存 volume先に指定してに永続保存 log driverを使って転送 a. コンテナ内に保存 何も設定しないとコンテナに保持されます。 メリット 何も設定しなくていい デメリット 当然コンテナが破棄された場合はログファイルがなくなります。 b. volume先に指定してに永続保存 volumeを用いてホストに永続的に保存します。 参照が切れないように-v <host_path>:<container_path>とするか、--volumes-from <container_name>でデータ用コンテナに保持してください。 メリット コンテナを破棄したとしてもvolumeでそこを指定すれば
https://github.com/Songmu/App-LJ ljというツールを書いた。標準入力を読んでJSONぽい文字列が含まれていたら色付きで綺麗に出してくれる。こんな感じ。 fluentdでstdoutで出したログとか、アプリケーションから雑にJSONで吐いたログを眺めるときとかに便利。 % cpanm App::LJ で入りますが、fatpackした単一ファイルも作ってあるので、以下のようにしても使えます。 % curl -L https://raw.githubusercontent.com/Songmu/App-LJ/master/lj > /usr/local/bin/lj; chmod +x /usr/local/bin/lj fatpackは @ks0608 さんのApp::Fatpack::Simpleを使った。便利。CPANにあげて欲しい。 実装だいぶ雑なので、だ
File::RotateLogs が大変便利でよく使っているのだが、これはファイルへ書き込むときに print を呼んでいる。 一方 にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし によると長いログを吐くときは syswrite にしないと混ざるとある。 よって File::RotateLogs も実は混ざることがあるのかなと思い、複数プロセスから長いログを吐きまくってみたが一向に混ざらなかった。 いろいろ調べた結果、open layer に最も低級な layer である :unix を指定すれば print 時も 1 つの write(2) になるようだった。 > cat test.pl open my $fh, ">:unix", "test.txt"; print $fh "a" x (1024 * 100);
プロセスアカウンティング用に広く利用できる物として "Process Accounting Utility" があります。環境によって、パッケージの名前が、 psacct もしくは acct になっているものです。 $ # インストール (ubuntu) $ apt-get install acct 用意されているコマンド lastcomm: 実行されたコマンドの表示 ac : ユーザの接続時間の表示 sa: 過去に実行されたコマンドの集計/フィルタ ※ 質問の要件を満たすために、一般ユーザーからはこれらのコマンドが実行できないようにしてください。 アカウンティングサービスの実行 $ # サービスの開始 $ /etc/init.d/acct start $ # サービスの停止 $ /etc/init.d/acct stop 実際は、accton コマンドによってプロセス監視が始められます。
こちらです。Perl でいうと Devel::KYTProf に性質がちかい。 motemen/go-loghttp · GitHub (GoDoc) 使用例 たとえばこういうコードに… package main import ( "io" "log" "net/http" "os" ) func main() { resp, err := http.Get(os.Args[1]) if err != nil { log.Fatal(err) } io.Copy(os.Stdout, resp.Body) } % go run main.go http://example.com/ <!doctype html> ... 一行追加すると: package main import ( "io" "log" "net/http" "os" _ "github.com/motemen/go-lo
Logs Are Streams, Not Files logs Fri Apr 01 07:29:49 -0700 2011 Server daemons (such as PostgreSQL or Nginx) and applications (such as a Rails or Django app) sometimes offer a configuration parameter for a path to the program’s logfile. This can lead us to think of logs as files. But a better conceptual model is to treat logs as time-ordered streams: there is no beginning or end, but rather an ong
少し前にログの話を書いた http://d.hatena.ne.jp/naoya/20130219/1361262854 ときに、Treasure Data については後日にもう少し詳細に書くと言ったので書くとしよう。 近頃 Treasure Data (以下、時折 TD) という名前をちらほら聞いたことがある人は多いのではないかと思います。「ビッグデータのクラウドサービスである」とか「日本人が創業したシリコンバレーのベンチャー」、あるいは Yahoo! 創業者の Jerry Yang が投資したとか、Fluentd と何か関係があるといった文脈などなど。 けど、具体的に Treasure Data がどういうサービスで、どういう機能を持っていて、どんな場面で利用されるものなのかはまだあまり良く知られていないかもしれない・・・ようにも見える。今日はその辺から少し紹介していこうかなと思う。
日本語でも書く Plack::Middleware::AxsLog バージョン 0.10 をリリースしました。 cpan: https://metacpan.org/release/Plack-Middleware-AxsLog 今までのバージョンでは、combined、common、ltsvの3つのログフォーマットしか使えなかったんだけど、新しいバージョンで任意のフォーマットが使えるようになりました。 AxsLogがPM::AccessLogに比べて速いのは、ログ文字列の生成を正規表現ではなく、単純な文字列連結でやっていたためで、その代わりにフォーマットを自由に変更できない制限がありました。 けど、このバージョンから Apache::LogFormat::Compiler を使っているので、速度を犠牲にすることなくフォーマットの変更が可能となりましたぞよ。 使い方 use Plack::
某所で 人間の脳には人の顔を識別するための特別な神経回路が最初から組み込まれていて、人の顔の違いを見分けたりというのが、他の図形よりも格段に高速に行えるようになっています。ということで、ログメッセージに顔文字を入れてみたら、なにこれすごいヽ(=´▽`=)ノ ってなったところ。 という発言をみかけたので、つくりました。 Log::Minimal::Emotional - https://gist.github.com/hirose31/4958764 「エモーショナル」はお好みなものに容易に再定義可能です。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Log::Minimal::Emotional; $Log::Minimal::Emotional::EMOTION->{CRITICAL} = '⊂二二二( ^ω^)
LTSVフォーマット本当に見やすくて便利だなと感じた@HIROCASTERでございませう。 何かと話題のLTSVだが、本当にコロンブスの卵だと思っている。 いままで、Apacheのcombine形式のログを独自に拡張したフォーマットを利用して、fluentd(実際はtd-agentを利用している)にログを収集させていた。 実感するためにLTSVフォーマットに実際に変更して運用し始めた。 NginxにLTSVフォーマットを登録する LTSVのサイトを参考にNginxの設定ファイル(/etc/nginx.confあたり)にLTSVのフォーマットを登録する。リバースプロキシとしても利用しているため、$upstream_response_timeの設定を意図的に増やしている。 log_format ltsv "time:$time_local" "thost:$remote_addr" "tfor
What is it? GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser. It provides fast and valuable HTTP statistics for system administrators that require a visual server report on the fly. Why GoAccess? GoAccess was designed to be a fast, terminal-based log analyzer. Its core idea is to quickly analyze and view we
追記(2/17) 変換スクリプトを見せてほしい、という要望があったので、 https://gist.github.com/stanaka/4967403 に上げておきました。ltsvを読み込んでオプションで指定したフォーマット(デフォルト JSON)に変更します。 追記ここまで LTSVの盛り上りも収束してきていますが、サイズに関する懸念があがっていたので、確認してみました。 手近にあったアクセスログ 186万件ほどを対象に、 ssv .. Combined Log Formatの拡張で、ラベルなし (レスポンス時間とか10個ぐらいのフィールドを拡張しています) json .. ラベルあり ltsv .. ラベルあり の3パターンで試してみました。 まずは行数を確認しておきます。 % wc -l access_log.json 1861706 access_log.json未圧縮だと、 a
LTSV って何? Labeled Tab-Separated Values という、テキストのフォーマットの仕様です。CSV や TSV や JSON そのほかと同じ、テキストデータのフォーマット名。主にログ、特に httpd のアクセスログなどに適用すると便利です。 仕様は http://ltsv.org にまとまっています。随時更新中です。 LTSV は単なるログのフォーマットであって、それ以上でもそれ以下でもありません。 LTSV ってタブ区切りで値に名前を付けただけのもの? はい、そうです。 これが 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (
Labeled Tab-separated Values (LTSV) がブームのようです。 LTSV については、ラベルをつけることで柔軟に拡張できるという点が、その特徴として取り上げられますが、もう一点、タブをセパレータに使うことでログのパースが簡単になった、という点を忘れるべきではないでしょう。 特に httpd のログは NCSA httpd という HTTP/0.9 時代のWebサーバのログフォーマットがベースに拡張されてきたため、以下のようにセパレータとして空白、[]、ダブルクォート ("")*1が混在するという、とても処理しづらいものになっていました。どれほど複雑かは「404 Blog Not Found:perl - Apache Combined Log を LTSV に」の実装を見れば明らかでしょう。 127.0.0.1 - - [08/Feb/2012:23:52:4
2013年02月08日19:00 カテゴリTipsLightweight Languages perl - Apache Combined Log を LTSV に びっぐうぇ〜ぶに乗る前の準備として。 Labeled Tab-separated Values (LTSV) Labeled Tab Separated Valuesノススメ - stanakaのブログ タグ「ltsv」を検索 - はてなブックマーク 移行にあたっては当然「過去ログどうするよ」という問題が発生するわけですが、一番使われているであろう (common|combined) log をLTSVに変換するスクリプトが、ざっと見回しても見つからなかったので。つーかススメるならこれくらい用意しようよ>id:stanaka ltsv.orgのexampleもcombined_ltsvの方がいいと思う。 Enjoy! Dan
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く