2014年1月27日 星期一

如何在Fedora 上 安裝rsyslog 7.4.9

舊的rsyslog,對於Cisco ASR的支援很差,因此直接裝上新版。

過程有點麻煩,記錄備查。

先安裝libestr:

 wget http://libestr.adiscon.com/files/download/libestr-0.1.9.tar.gz
 tar xvzf libestr-0.1.9.tar.gz
 cd libestr-0.1.9
  ./configure
  make && make install

再安裝json:
wget https://github.com/json-c/json-c/archive/json-c-0.11-20130402.tar.gz --no-check-certificate
tar xvzf json-c-0.11-20130402
cd json-c-json-c-0.11-20130402
./configure
make && make install

接著安裝docutils:
wget https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz --no-check-certificate
tar xvzf docutils-0.11.tar.gz
cd docutils-0.11
python setup.py install
ln -s /usr/bin/rst2man.py /usr/bin/rst2man

再來安裝liblogging,我們要的是裡面的libstdlog.h和libstdlog.so
wget http://ftp5.gwdg.de/pub/linux/archlinux/community/os/x86_64/liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
tar xvf liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
cd /usr/src/usr/lib/
mv * /usr/lib
cd ../include/
mv * /usr/include/

再安裝uuid相關套件
yum -y install uuid uuid-devel libuuid libuuid-devel

再補一下libgrcypt套件與發展程式:
yum -y install libgcrypt libgcrypt-devel

最後回到重頭戲:
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.4.9.tar.gz
tar xvzf rsyslog-7.4.9.tar.gz 
cd rsyslog-7.4.9
./configure --prefix=/opt/rsyslog --enable-mysql PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ LIBLOGSTD_CFLAGS=/usr/local/include/liblogging LIBLOGSTD_LIBS=/usr/lib/libstdlog.so
make && make install

停掉原有的rsyslog,再執行新的就ok了。

理論上 LD_LIBRARY_PATH要把剛剛的libstdlog.so所在的目錄export出去,不然會找不到。

但這樣做的時候service rsyslog restart會找不到so檔。

因此最後的解法是:
cp /opt/rsyslog/lib/rsyslog/libstdlog.so* /lib64/

正規的解釋如下:

Libraries have been installed in:
   /opt/rsyslog/lib/rsyslog

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

參考網頁:http://www.07net01.com/storage_networking/Rsyslog__loganalyzerrizhifuwuqidajian_586293_1379322838.html

2014年1月13日 星期一

rrdtool 出小圖時資料會變動?

有一個新案子。需求大概是這樣。
1、測試某幾個特殊網頁的access time和ping latency
2、測試ftp網站的上傳及下載速度
3、將之輸出為pdf檔。

所以我的作法是
1、用rrdtool來處理儲存及繪圖的部份
2、用fpdf來出pdf檔。將前述的圖及表包起來。

但作完後有一個問題。同一個時間區段的資料,用大圖和小圖竟然會有不同的輸出結果:
例如:
大圖727x233



可以看出,Maximum是115.64,





小圖267x121,Maximum竟然變成了89,

 猜想是因為x軸沒有辦法畫到最右邊的關係。但...取值時是損讀取RRD檔,怎麼會和graph有關?

似乎沒有什麼好解法,使用--full-size-mode 可以暫時排除,並且只保留Y軸的大小。(圖變成了400x80)
但這樣圖會變的很醜...像這樣。我如果出這種圖應該會被打死吧。




所以不得不找其它解,其中一個解法就是先產出大圖,再用imagemagic來把它轉成小圖,但這樣會變的很小很糊...
語法如下: ( 727x205 to )
convert facebook-latency.png -resize 20%  facebook-latency.png





或者圖型會變的很胖,即使把Y軸的說明文字拿掉也一樣難看。
嵌入PDF檔後,更是失敗。
試了一個小時,沒有什麼好辦法。只好從其它方面著手。

就是從pdf的產出程式來動手,最後在輸出image檔時,強制指定尺寸為95*40,順利結案。
看來fpdf縮圖的功力不錯。
 $pdf->Image("$PATH/facebook-latency.png",10,110,95,40,'PNG');

最後貼一下出的pdf檔。其實因為+8的問題也弄了很久。
之後是直接說這個報表是昨天08:00 到今天08:00的就好。
否則如果真的圖檔也要從00:00到00:00,那我就必需直接讀rrd作運算,而不能使用rrdfetch的功能來直接讀檔了。