おぼえがき
おぼえがき
mecabにオリジナル辞書をシステム辞書として投入する
mecabに独自の辞書の追加する。
最終的には、wikipediaや、hatenaのデータもオリジナル辞書に入れる
ここに、https://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
書いてあることを基本的にはやったまで。
ただ、文字コード周りや、足らないファイルや、バックアップについて
など、メモしとく
たたいたコマンドの先頭には、#を入れておく
■概要
-------------------------
mecabへオリジナル辞書追加方法には、システム辞書への追加
ユーザー辞書への追加の2種類がある。
辞書更新が頻繁でないときや, 解析速度を落としたくない時は, 直接 システム辞書を変更するのがよいでしょう
とのことなので、システム辞書への追加を行う
■現状の確認
-------------------------
Scientific Linux release 6.0 (Carbon)
mecab-0.996-1.el6.x86_64
mecab-ipadic-2.7.0.20070801-8.el6.1.x86_64
が入っている状態
■やりたいこと
-------------------------
#mecab
綾小路きみまろ
綾小路 名詞,固有名詞,人名,姓,*,*,綾小路,アヤノコウジ,アヤノコージ
きみ 名詞,一般,*,*,*,*,きみ,*,*,wikipedia
まろ 名詞,一般,*,*,*,*,まろ,*,*,wikipedia
EOS
これを、「綾小路きみまろ」という名詞として認識させたい
■バックアップと新たなシステム辞書設置場所の用意
-------------------------
mecabの設定状況はこんな感じ
#cat /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = /usr/lib64/mecab/dic/ipadic
; userdic = /home/foo/bar/user.dic
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
システム辞書は、dicdirを見ているのがわかるので、こいつのバックアップを
とっておく。
#cp /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.org
これからの作業で、おかしくなる可能性があるので、必ずオリジナルのバックアップを
やっておくこと。以降の項目で、dicdirのパスを書き換えるが、うまくいかなくなったら、
dicdirのパスをオリジナルに向けなおせば、元の状態に戻る
新しいシステム辞書を置くディレクトリを掘る
#cp -r /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.update.v1
■準備
-------------------------
1.コスト自動推定の機能を使う準備
https://code.google.com/p/mecab/downloads/detail?name=mecab-ipadic-2.7.0-20070801.model.bz2
ここから、 mecab-ipadicのモデルファイルをダウンロードする
解凍して、utf8にして
/tmpに置いとく
2.ipadicのオリジナルをダウンロードする
http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
↑ここから、ipadicのオリジナルをダウンロードして、解凍する
中に、*.def *.csvが存在するので、それを全て、utf8化して、
/usr/lib64/mecab/dic/ipadic.update.v1/配下に置く
ちゃんとutf8化しておかないと、後で痛い目にあう
3.設定ファイルの変更
#vi /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir = /usr/lib64/mecab/dic/ipadic
dicdir = /usr/lib64/mecab/dic/ipadic.update.v1
にして、保存
■オリジナル辞書の作成
-------------------------
1.オリジナル辞書の元データの用意
mecabの辞書のフォーマットは、
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
となっている。
なんのこっちゃわからんが、とりあえず、
#cat /tmp/test.csv
綾小路きみまろ,,,,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,this_is_test_dic
※最後に、改行は入れない
を用意する
2.オリジナル辞書の作成
左文脈ID,右文脈ID,コストの部分には値が入っていないので、その値を下記の方法でセット
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u test2.csv -f utf8 -t utf8 -a test.csv
-m:コスト自動推定の機能を使うデータの場所
-d:システム辞書のディレクトリのパス
-u:オリジナル辞書出力先
-f:-dの文字コード(デフォがutf8)
-t:csvの文字コード
-a:オリジナル辞書を作成する元データ
/tmp/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode...
reading test.csv ...
done!
できた。
#cat test2.csv
綾小路きみまろ,1285,1285,7336,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
左文脈ID,右文脈ID,コストの部分にデータが入っているのが確認できる
■システム辞書アップデート
-------------------------
test2.csvができたので、/usr/lib64/mecab/dic/ipadic.update.v1にそのファイルを持っていく
#ls /usr/lib64/mecab/dic/ipadic.update.v1
上記のような状態になっているはず。
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
reading ./unk.def ... 40
emitting double-array: 100% |###########################################|
./model.def is not found. skipped.
reading ./Noun.name.csv ... 34202
reading ./Noun.number.csv ... 42
reading ./Noun.verbal.csv ... 12146
reading ./Others.csv ... 2
reading ./Symbol.csv ... 208
reading ./test2.csv ... 1
reading ./Prefix.csv ... 221
reading ./Noun.place.csv ... 72999
reading ./Interjection.csv ... 252
reading ./Adnominal.csv ... 135
reading ./Noun.csv ... 60477
reading ./Suffix.csv ... 1393
reading ./Adj.csv ... 27210
reading ./Noun.nai.csv ... 42
reading ./Noun.demonst.csv ... 120
reading ./Noun.adjv.csv ... 3328
reading ./Postp.csv ... 146
reading ./Filler.csv ... 19
reading ./Verb.csv ... 130750
reading ./Noun.org.csv ... 16668
reading ./Auxil.csv ... 199
reading ./Noun.others.csv ... 151
reading ./Postp-col.csv ... 91
reading ./Noun.adverbal.csv ... 795
reading ./Adverb.csv ... 3032
reading ./Noun.proper.csv ... 27327
reading ./Conjunction.csv ... 171
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
#mecab
綾小路きみまろ
綾小路きみまろ 名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
EOS
#mecab
すもも
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
EOS
■出会ったエラーたち
-------------------------
feature_index.cpp(81) [ifs] no such file or directory: /usr/lib64/mecab/dic/ipadic/feature.def
このエラーは、■準備:2でをちゃんとやること
viterbi.cpp(59) [tokenizer_->dictionary_info()->lsize == connector_->left_size() && tokenizer_->dictionary_info()->rsize == connector_->right_size()] Transition table and dictionary are not compatible
このえらーも、■準備:2でをちゃんとやることdefファイルがなかった
context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID for 名詞,一般,*,*,*,*,*
■オリジナル辞書の作成:1のフォーマットでやればいける
■wikipediaを突っ込んでみる
-------------------------
1.データのダウンロード
#wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
から持ってくる
2.不要な文字列を削って、オリジナル辞書のフォーマットを作る
下記ファイルを用意
#cat grepptn
^.{1,3}$
page_title
^[0-9-]+$
曖昧さ回避
^日本の
^日本に
^日本と
^日本で
^中国の
^中国に
^中国と
^中国で
^アメリカの
^アメリカに
^アメリカと
^アメリカで
^ヨーロッパの
^ヨーロッパに
^ヨーロッパと
^ヨーロッパで
_\(何か\)$
一覧$
の登場人物$
^[0-9]{4}[年|_]
^[0-9]+月[0-9]+日
で、オリジナル辞書を作るシェルを実行
#for i in $(sed -e "s/,//g" jawiki-latest-all-titles-in-ns0 | pcregrep -vf grepptn )
#do
# echo "$i,,,,名詞,一般,*,*,*,*,$i,*,*,wikipedia" >> newdic.csv
#done
これは、「,」が含まれるとおかしくなるので、それをsedで取り除いて、
pcregrepにて、不要なレコードを除外するシェル。
pcregrepのfオプションで、不要なファイルを除外するパターンファイルを指定している
3.左文脈ID,右文脈ID,コストを生成
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u wikidic.csv -f utf8 -t utf8 -a newdic.csv
これで、wikidic.csvにデータが出力されるはず
4.システム辞書に追加
/tmpに生成された、wikidic.csvをusr/lib64/mecab/dic/ipadic.update.v1に持ってきて
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
で、出来上がり
■hatenaキーワードを突っ込んでみる
-------------------------
1.データのダウンロード
#wget wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
から持ってくる
あとは、一緒
おしまい
最終的には、wikipediaや、hatenaのデータもオリジナル辞書に入れる
ここに、https://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
書いてあることを基本的にはやったまで。
ただ、文字コード周りや、足らないファイルや、バックアップについて
など、メモしとく
たたいたコマンドの先頭には、#を入れておく
■概要
-------------------------
mecabへオリジナル辞書追加方法には、システム辞書への追加
ユーザー辞書への追加の2種類がある。
辞書更新が頻繁でないときや, 解析速度を落としたくない時は, 直接 システム辞書を変更するのがよいでしょう
とのことなので、システム辞書への追加を行う
■現状の確認
-------------------------
Scientific Linux release 6.0 (Carbon)
mecab-0.996-1.el6.x86_64
mecab-ipadic-2.7.0.20070801-8.el6.1.x86_64
が入っている状態
■やりたいこと
-------------------------
#mecab
綾小路きみまろ
綾小路 名詞,固有名詞,人名,姓,*,*,綾小路,アヤノコウジ,アヤノコージ
きみ 名詞,一般,*,*,*,*,きみ,*,*,wikipedia
まろ 名詞,一般,*,*,*,*,まろ,*,*,wikipedia
EOS
これを、「綾小路きみまろ」という名詞として認識させたい
■バックアップと新たなシステム辞書設置場所の用意
-------------------------
mecabの設定状況はこんな感じ
#cat /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = /usr/lib64/mecab/dic/ipadic
; userdic = /home/foo/bar/user.dic
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
システム辞書は、dicdirを見ているのがわかるので、こいつのバックアップを
とっておく。
#cp /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.org
これからの作業で、おかしくなる可能性があるので、必ずオリジナルのバックアップを
やっておくこと。以降の項目で、dicdirのパスを書き換えるが、うまくいかなくなったら、
dicdirのパスをオリジナルに向けなおせば、元の状態に戻る
新しいシステム辞書を置くディレクトリを掘る
#cp -r /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.update.v1
■準備
-------------------------
1.コスト自動推定の機能を使う準備
https://code.google.com/p/mecab/downloads/detail?name=mecab-ipadic-2.7.0-20070801.model.bz2
ここから、 mecab-ipadicのモデルファイルをダウンロードする
解凍して、utf8にして
/tmpに置いとく
2.ipadicのオリジナルをダウンロードする
http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
↑ここから、ipadicのオリジナルをダウンロードして、解凍する
中に、*.def *.csvが存在するので、それを全て、utf8化して、
/usr/lib64/mecab/dic/ipadic.update.v1/配下に置く
ちゃんとutf8化しておかないと、後で痛い目にあう
3.設定ファイルの変更
#vi /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir = /usr/lib64/mecab/dic/ipadic
dicdir = /usr/lib64/mecab/dic/ipadic.update.v1
にして、保存
■オリジナル辞書の作成
-------------------------
1.オリジナル辞書の元データの用意
mecabの辞書のフォーマットは、
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
となっている。
なんのこっちゃわからんが、とりあえず、
#cat /tmp/test.csv
綾小路きみまろ,,,,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,this_is_test_dic
※最後に、改行は入れない
を用意する
2.オリジナル辞書の作成
左文脈ID,右文脈ID,コストの部分には値が入っていないので、その値を下記の方法でセット
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u test2.csv -f utf8 -t utf8 -a test.csv
-m:コスト自動推定の機能を使うデータの場所
-d:システム辞書のディレクトリのパス
-u:オリジナル辞書出力先
-f:-dの文字コード(デフォがutf8)
-t:csvの文字コード
-a:オリジナル辞書を作成する元データ
/tmp/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode...
reading test.csv ...
done!
できた。
#cat test2.csv
綾小路きみまろ,1285,1285,7336,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
左文脈ID,右文脈ID,コストの部分にデータが入っているのが確認できる
■システム辞書アップデート
-------------------------
test2.csvができたので、/usr/lib64/mecab/dic/ipadic.update.v1にそのファイルを持っていく
#ls /usr/lib64/mecab/dic/ipadic.update.v1
Adj.csv Interjection.csv Noun.name.csv Noun.verbal.csv Symbol.csv dicrc rewrite.def Adnominal.csv Noun.adjv.csv Noun.number.csv Others.csv Verb.csv feature.def right-id.def Adverb.csv Noun.adverbal.csv Noun.org.csv Postp-col.csv left-id.def sys.dic Auxil.csv Noun.csv Noun.others.csv Postp.csv matrix.bin test2.csv Conjunction.csv Noun.demonst.csv Noun.place.csv Prefix.csv char.bin matrix.def unk.def Filler.csv Noun.nai.csv Noun.proper.csv Suffix.csv char.def pos-id.def unk.dic
上記のような状態になっているはず。
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
reading ./unk.def ... 40
emitting double-array: 100% |###########################################|
./model.def is not found. skipped.
reading ./Noun.name.csv ... 34202
reading ./Noun.number.csv ... 42
reading ./Noun.verbal.csv ... 12146
reading ./Others.csv ... 2
reading ./Symbol.csv ... 208
reading ./test2.csv ... 1
reading ./Prefix.csv ... 221
reading ./Noun.place.csv ... 72999
reading ./Interjection.csv ... 252
reading ./Adnominal.csv ... 135
reading ./Noun.csv ... 60477
reading ./Suffix.csv ... 1393
reading ./Adj.csv ... 27210
reading ./Noun.nai.csv ... 42
reading ./Noun.demonst.csv ... 120
reading ./Noun.adjv.csv ... 3328
reading ./Postp.csv ... 146
reading ./Filler.csv ... 19
reading ./Verb.csv ... 130750
reading ./Noun.org.csv ... 16668
reading ./Auxil.csv ... 199
reading ./Noun.others.csv ... 151
reading ./Postp-col.csv ... 91
reading ./Noun.adverbal.csv ... 795
reading ./Adverb.csv ... 3032
reading ./Noun.proper.csv ... 27327
reading ./Conjunction.csv ... 171
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
#mecab
綾小路きみまろ
綾小路きみまろ 名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
EOS
#mecab
すもも
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
EOS
■出会ったエラーたち
-------------------------
feature_index.cpp(81) [ifs] no such file or directory: /usr/lib64/mecab/dic/ipadic/feature.def
このエラーは、■準備:2でをちゃんとやること
viterbi.cpp(59) [tokenizer_->dictionary_info()->lsize == connector_->left_size() && tokenizer_->dictionary_info()->rsize == connector_->right_size()] Transition table and dictionary are not compatible
このえらーも、■準備:2でをちゃんとやることdefファイルがなかった
context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID for 名詞,一般,*,*,*,*,*
■オリジナル辞書の作成:1のフォーマットでやればいける
■wikipediaを突っ込んでみる
-------------------------
1.データのダウンロード
#wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
から持ってくる
2.不要な文字列を削って、オリジナル辞書のフォーマットを作る
下記ファイルを用意
#cat grepptn
^.{1,3}$
page_title
^[0-9-]+$
曖昧さ回避
^日本の
^日本に
^日本と
^日本で
^中国の
^中国に
^中国と
^中国で
^アメリカの
^アメリカに
^アメリカと
^アメリカで
^ヨーロッパの
^ヨーロッパに
^ヨーロッパと
^ヨーロッパで
_\(何か\)$
一覧$
の登場人物$
^[0-9]{4}[年|_]
^[0-9]+月[0-9]+日
で、オリジナル辞書を作るシェルを実行
#for i in $(sed -e "s/,//g" jawiki-latest-all-titles-in-ns0 | pcregrep -vf grepptn )
#do
# echo "$i,,,,名詞,一般,*,*,*,*,$i,*,*,wikipedia" >> newdic.csv
#done
これは、「,」が含まれるとおかしくなるので、それをsedで取り除いて、
pcregrepにて、不要なレコードを除外するシェル。
pcregrepのfオプションで、不要なファイルを除外するパターンファイルを指定している
3.左文脈ID,右文脈ID,コストを生成
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u wikidic.csv -f utf8 -t utf8 -a newdic.csv
これで、wikidic.csvにデータが出力されるはず
4.システム辞書に追加
/tmpに生成された、wikidic.csvをusr/lib64/mecab/dic/ipadic.update.v1に持ってきて
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
で、出来上がり
■hatenaキーワードを突っ込んでみる
-------------------------
1.データのダウンロード
#wget wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
から持ってくる
あとは、一緒
おしまい
コメント ( 0 )
ubuntu livewallpaper
ubuntuのlivewallpaperのstableを入れるおぼえがき
sudo add-apt-repository ppa:fyrmir/livewallpaper-stable
sudo apt-get update && sudo apt-get install livewallpaper livewallpaper-config livewallpaper-indicator
あとは、livewallpaper-config起動すると実行できる
さて、仕事するか
sudo add-apt-repository ppa:fyrmir/livewallpaper-stable
sudo apt-get update && sudo apt-get install livewallpaper livewallpaper-config livewallpaper-indicator
あとは、livewallpaper-config起動すると実行できる
さて、仕事するか
コメント ( 0 )
イベントログ収集ツール fluentのインストール
fluentをインストールしてみる
インデックス
0.どんなもの?
1.インストール
2.設定-その1
3.設定-その2
0.どんなもの?
分散しているサーバーのログをかき集めて、一つのサーバーにかき集めることが出来るみたい
SPOFにもなっていないらしい。ログ形式は、JSONだったりするので、アプリケーションでの利用も
期待できるかと思われる。syslogdみたいなものと思えばいいかと。
ただ、受け取ったものをプラグインでごにょごにょ出来るみたい。
まぁ、やってみなきゃ分かんないんで、apacheのログをかき集めてみた
kmofs/messagepackやらを提供されいてるかたのツールだったりする
※とりあえず、備忘録代わりなので、設定は雑...
詳しくは
作成者のブログ
スライド
ドキュメント
1.インストール
sudo yum install openssl-devel.x86_64(サーバーに入ってなかった)
sudo yum install readline-devel.x86_64(サーバーに入ってなかった)
sudo rpm -ivh td-agent-1.0.3-0.el6.x86_64.rpm(rpm)
設定ファイルは、 /etc/td-agent/td-agent.conf ここに入る
起動方法は、/etc/init.d/td-agent start
設定ファイルの考え方が分かれば作りはめっちゃしんぷる
どのデータを受信して...<source>のディレクティブに書き込む
そのデータをどうするか...<match>のディレクティブに書き込む
2.設定-その1
とりあえず、wwwサーバのログをローカルに出力してみる
/etc/td-agent/td-agent.confをいじればいい
apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをファイルに出力する<match>ディレクティブ
<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>
<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>
アパッチのログ出力をcombineに設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ログの出力方法は、いろんな種類でも対応できるから、それは
ドキュメント見ればいい
これで、デーモン起動すればいける
3.設定-その2
wwwサーバが複数台あって、そのログを、ログ収集サーバーにかき集める
wwwサーバー側
apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをtcp(24224)を通してhostに送る
iptablesで許可とかしてあげて、、、
<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>
<match apache.access>
type tcp
host XXXXX # ログ収集サーバーのホスト名
port 24224 # ログ収集サーバーがLISTENしているポート
buffer_type file
buffer_path /tmp/fluent_buf_myforward
flush_interval 10s
</match>
24224を通してきたデータを受信して、そのデータをファイルに出力する
ログ収集サーバー側
<source>
type tcp
port 24224
bind 0.0.0.0
</source>
<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>
こんなかんじ
暫くすると、ログ収集サーバの/tmp/配下にログが出力されるようになる。
設定がかなり適当な気がするが、とりあえず、またいじろう
apacheのアクセスログ以外もいろいろこの仕組みが利用できるから
かき集めてDBに書き出すような処理をやってみると色々幸せになるかも
SPOFになってなさそうなので、その試験もやろう
あとは、現サービスで実現できなかったことがこれを通して実現可能になるかだね
そこまで考えないとだめ。そこまで考えられるから楽しい・・・ってもんだ
インデックス
0.どんなもの?
1.インストール
2.設定-その1
3.設定-その2
0.どんなもの?
分散しているサーバーのログをかき集めて、一つのサーバーにかき集めることが出来るみたい
SPOFにもなっていないらしい。ログ形式は、JSONだったりするので、アプリケーションでの利用も
期待できるかと思われる。syslogdみたいなものと思えばいいかと。
ただ、受け取ったものをプラグインでごにょごにょ出来るみたい。
まぁ、やってみなきゃ分かんないんで、apacheのログをかき集めてみた
kmofs/messagepackやらを提供されいてるかたのツールだったりする
※とりあえず、備忘録代わりなので、設定は雑...
詳しくは
作成者のブログ
スライド
ドキュメント
1.インストール
sudo yum install openssl-devel.x86_64(サーバーに入ってなかった)
sudo yum install readline-devel.x86_64(サーバーに入ってなかった)
sudo rpm -ivh td-agent-1.0.3-0.el6.x86_64.rpm(rpm)
設定ファイルは、 /etc/td-agent/td-agent.conf ここに入る
起動方法は、/etc/init.d/td-agent start
設定ファイルの考え方が分かれば作りはめっちゃしんぷる
どのデータを受信して...<source>のディレクティブに書き込む
そのデータをどうするか...<match>のディレクティブに書き込む
2.設定-その1
とりあえず、wwwサーバのログをローカルに出力してみる
/etc/td-agent/td-agent.confをいじればいい
apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをファイルに出力する<match>ディレクティブ
<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>
<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>
アパッチのログ出力をcombineに設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ログの出力方法は、いろんな種類でも対応できるから、それは
ドキュメント見ればいい
これで、デーモン起動すればいける
3.設定-その2
wwwサーバが複数台あって、そのログを、ログ収集サーバーにかき集める
wwwサーバー側
apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをtcp(24224)を通してhostに送る
iptablesで許可とかしてあげて、、、
<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>
<match apache.access>
type tcp
host XXXXX # ログ収集サーバーのホスト名
port 24224 # ログ収集サーバーがLISTENしているポート
buffer_type file
buffer_path /tmp/fluent_buf_myforward
flush_interval 10s
</match>
24224を通してきたデータを受信して、そのデータをファイルに出力する
ログ収集サーバー側
<source>
type tcp
port 24224
bind 0.0.0.0
</source>
<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>
こんなかんじ
暫くすると、ログ収集サーバの/tmp/配下にログが出力されるようになる。
設定がかなり適当な気がするが、とりあえず、またいじろう
apacheのアクセスログ以外もいろいろこの仕組みが利用できるから
かき集めてDBに書き出すような処理をやってみると色々幸せになるかも
SPOFになってなさそうなので、その試験もやろう
あとは、現サービスで実現できなかったことがこれを通して実現可能になるかだね
そこまで考えないとだめ。そこまで考えられるから楽しい・・・ってもんだ
コメント ( 0 )
psshについて
psshについて
http://code.google.com/p/parallel-ssh/
pssh
-h ホスト名一覧の入ったファイル
-H ホスト名直接指定
-l 実行ユーザ
-p parallelの同時実行数
-o 出力結果のディレクトリ指定
-i コマンド直接指定
-I コマンドインライン指定
-P -Iオプション指定時は使うと良いよ
例:)
▼host1をls(-i)
pssh -H host1 -i ls
▼host1をls(-I)
pssh -H host1 -I -P
ls
ctrl+d
▼host1とhost2のuptimeとlsをファイルに書き込む
hostfileの中は
host1
host2
pssh -H hostfile -I -P -o /tmp/result/
ls
ctrl+d
結果は、
/tmp/result/host1
/tmp/result/host2
この中にデータが入っている
コメント ( 0 )
« 前ページ |