はてなブックマークプラス機能:タグスポンサーは「そのタグに」興味がある人が分かる
はてなブックマークプラスの一ヶ月無料キャンペーンを利用して、タグのスポンサー機能を使ってみました。
タグのスポンサー機能は名前だけ聞くと、タグのスポンサー(広告主)ということで、最初は何に使うのかな?と思っていましたが、以下の情報がわかるなぁと思いました。
「そのタグに興味のある人がわかる(例えば ruby タグのスポンサーならおそらく ruby に興味がある)」
スポンサーになっている方の、ブックマークのコメントは参考にしやすいかもしれませんし、興味のある人同士でつながって情報交換が生まれるかもしれませんし。いろいろ効果がありそうですね。
例えば、はてなブックマーク - coLinuxでCentOS5.1を複数環境にしてみる - TrinityT's BLOGでは、colinuxの部分が赤くなっています。私は colinux のタグのスポンサーになっています。それは colinx に興味があるからです。ちなみにあと2つは ruby と rails です。
皆さんは、はてなブックマークプラスの機能はどのように使っていますか?
便利そうなら、無料期間が過ぎても使おうと思っていますので、ぜひ教えてください><
syslog-ngのログ集約時にホスト名でフィルターする方法
以下のような、サーバ構成でWebサーバのログを収集したいと考えたとします。
デプロイなどの関係上、設定ファイル(configファイル)はサーバごとに変更したくないという場合があります。
同じ、local6.info でログサーバに投げるため、通常ログサーバ側では同じログファイルに保存されますが、ホスト名などでフィルターをかければログファイルを分けることができます。それをやってみます。
転送元サーバの /opt/syslog-ng/etc/syslog-ng.conf (ホスト名:web-a、web-bともに同じです)
/opt/syslog-ng/etc/syslog-ng.conf
source s_local { file ("/proc/kmsg" program_override("kernel: ")); unix-stream("/dev/log"); internal(); }; destination d_loghost { tcp("loghost");}; filter f_lighttpd_log { facility(local6) and level(info); }; log { source(s_local); filter(f_lighttpd_log); destination(d_loghost); };
/etc/hosts
192.168.0.3 loghost
フィルター実装前のログサーバの /opt/syslog-ng/etc/syslog-ng.conf
/opt/syslog-ng/etc/syslog-ng.conf
source s_local { file ("/proc/kmsg" program_override("kernel: ")); unix-stream("/dev/log"); internal(); tcp(); }; destination d_lighttpd_log { file("/var/log/access.log"); }; filter f_lighttpd_log { facility(local6) and level(info); }; log { source(s_local); filter(f_lighttpd_log); destination(d_lighttpd_log); };
フィルター実装後のログサーバの /opt/syslog-ng/etc/syslog-ng.conf
/opt/syslog-ng/etc/syslog-ng.conf
source s_local { file ("/proc/kmsg" program_override("kernel: ")); unix-stream("/dev/log"); internal(); tcp(); }; destination d_lighttpd_log_web-a { file("/var/log/web-a/access.log"); }; destination d_lighttpd_log_web-b { file("/var/log/web-b/access.log"); }; filter f_lighttpd_log_web-a { facility(local6) and level(info) and host(web-a); }; filter f_lighttpd_log_web-b { facility(local6) and level(info) and host(web-b); }; log { source(s_local); filter(f_lighttpd_log_web-a); destination(d_lighttpd_log_web-a); }; log { source(s_local); filter(f_lighttpd_log_web-b); destination(d_lighttpd_log_web-b); };
名前解決とIP直の指定
フィルターのホスト名の部分ですが、このホスト名は 名前解決できないと認識できないようなので、ログサーバの /etc/hostsに以下を加えます。
/etc/hosts
192.168.0.1 web-a 192.168.0.2 web-b
もし、名前解決が面倒であれば、IPで指定しても大丈夫です。
filter f_lighttpd_log_web-a { facility(local6) and level(info) and host(192.168.0.1); }; filter f_lighttpd_log_web-b { facility(local6) and level(info) and host(192.168.0.2); };
これで、ホスト名でフィルターが実現できました。
参考
環境
$ rpm -qa | grep syslog-ng syslog-ng-3.0.2-1.rhel5 $ cat /etc/redhat-release CentOS release 5 (Final)
rubyインストールしてあるのにsudoすると「/usr/bin/env: ruby: そのようなファイルやディレクトリはありません」と言われる
とある、gemをインストールしようとしたところ以下のようになります。
$ sudo gem install my_gem-0.0.1.gem /usr/bin/env: ruby: そのようなファイルやディレクトリはありません
my_gem-0.0.1.gem は自作した gem でありファイルは存在します。
一般ユーザで「/usr/bin/env ruby -v」 はいける
$ /usr/bin/env ruby -v ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
rootユーザでも「/usr/bin/env ruby -v」 はいける
# /usr/bin/env ruby -v ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
なんと、一般ユーザの sudo だと駄目なのことが判明
$ sudo /usr/bin/env ruby -v
/usr/bin/env: ruby: そのようなファイルやディレクトリはありません
ちなみに、rubyのインストール場所は以下
$ which ruby
/usr/local/bin/ruby
/etc/sudoers には以下のように書いてある。
%wheel ALL=(ALL) ALL
つまり、wheelグループに所属しているユーザのコマンドはすべて使えるはずである。今回 sudo を実行したいユーザ hoge はちゃんとwheelグループにいる。
$ cat /etc/group | grep hoge wheel:x:10:root,hoge hoge:x:500:
sudoはセキュリティ上PATHを引き継がないらしい・・・
ということがわかったので、一般ユーザ hoge の ~/.bashrc に以下の行を追加します。
export PATH=/usr/local/bin:$PATH alias sudo="sudo env PATH=$PATH"
再読み込み
$ source .bashrc
実行してみる
$ sudo /usr/bin/env ruby -v ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
できました・・・。でも、CentOS 5.1や5.2を利用しているときは、そんなことなかったのになぁ・・・。CentOS5.3になってから急にできなくなった・・・。なぜだ・・・。
pacoのインストールでpaco自身をインストール( sudo make logme )するときにエラーになったのも同じ原因でした。
参考
環境
$ cat /etc/redhat-release CentOS release 5.3 (Final) $ ruby -v ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux
追記
上記のままだと以下の問題が起こります。
$ sudo -u mysql ls env: -u: そのようなファイルやディレクトリはありません
-u を認識しなくて、userを変更してコマンドが実行できません。
そのような時は、 ~/.bashrc の記述を以下のようにしてください。
export PATH=/usr/local/bin:$PATH alias sudo="sudo PATH=$PATH"
env をなくしています。これで、userを変更して実行できます。
$ sudo -u mysql ls ls: .: 許可がありません