Showing posts with label Tivoli Directory. Show all posts
Showing posts with label Tivoli Directory. Show all posts

24.11.09

Manage IBM Tivoli Directory Log

การจัดการ log ของ Tivoli Directory ปกติแ้ล้วสามารถจัดการได้โดยปกติผ่านเครื่องมือของ Tivoli แต่ถ้าเรานำ Tivoli ไปลงบน OS ที่ไม่รองรับมันจะไม่ทำงาน
อย่างในกรณีของผมเองตอนนี้ใช้ Tivoli Directory v.6.2 แต่มีความจำเป็นต้องนำไปติดตั้งบน windows server 2008 แน่นอนว่ามันไม่รองรับกับ OS ดังกล่าว จึงต้องเขียนโปรแกรมขึ้นมาเพื่อจัดการเอง
ความต้องการขั้นต่ำคือ
  • เก็บ log ทั้งหมดลงใน zip ไฟล์เพื่อลดเนื้อที่ โดยชื่อไฟล์จะมีวันที่ต่อท้ายด้วย
  • ตัวโปรแกรมต้องบอกได้ว่าทำงานสำเร็จหรือไม่สำเร็จ และเพราะคำสั่งไหน เพราะอะไร เก็บลง log file แยกตะหาก
  • จัดการ log ที่เก็บได้ว่าต้องการให้อยู่กี่วัน (ตามนโยบายคือเก็บ log ไว้ 90 วัน)
ผมเขียน batch ครับแล้วตั้งเป็น job เอาไว้ให้ทำงานทุกเสาร์ตอนตีสาม (เพราะมี job อีกหลายตัวทำงานก่อน และถ้ามีปัญหาเรายังมีเวลาเข้าไปแก้ก่อนถึงเช้าวันจันทร์) ผมไม่ได้จะมา demo ทั้งหมดให้ดูหรอกครับ แต่จะหยิบคำสั่ง ldap บางอย่างที่จำเป็นต้องใช้ เพื่อนำไปพัฒนาต่อได้มาแปะไว้ (ส่วนโปรแกรมจริงไม่ขอเอามาแสดงครับเพราะจะยาวไป)

ดึงวันที่และเวลาปัจจุบันออกมา
@echo off
:: set datetime variable
SETLOCAL
For /f "tokens=1-3 delims=1234567890 " %%a in ("%time%") Do set "delims=%%a%%b%%c"
For /f "tokens=1-4 delims=%delims%" %%G in ("%time%") Do (
Set _hh=%%G
Set _min=%%H
Set _ss=%%I
Set _ms=%%J
)
:: Strip any leading spaces
Set _hh=%_hh: =%

:: Ensure the hours have a leading zero
if 1%_hh% LSS 20 Set _hh=0%_hh%

ENDLOCAL&Set _time=%_hh%%_min%%_ss%

@echo off&SETLOCAL
:: This will return date into environment vars
:: Works on any NT/2K/XP machine independent of regional date settings
:: 20 March 2002
FOR /f "tokens=1-4 delims=/-. " %%G IN ('date /t') DO (call :s_fixdate %%G %%H %%I %%J)
goto :s_print_the_date

:s_fixdate
if "%1:~0,1%" GTR "9" shift
FOR /f "skip=1 tokens=2-4 delims=(-)" %%G IN ('echo.^|date') DO (
set %%G=%1&set %%H=%2&set %%I=%3)
goto :eof

:s_print_the_date
ENDLOCAL&SET _date=%yy%%mm%%dd%

เปลี่ยนชื่อ ldap log ผมเขียนเป็น function ไว้เพื่อเรียกง่ายๆ
call :changefileconfigldap ibmslapd ibmslapd
call :changefileconfigldap ibmdiradm Admin
call :changefileconfigldap adminaudit Admin Audit
call :changefileconfigldap audit Audit
call :changefileconfigldap bulkload Bulkload
call :changefileconfigldap idstools Tools
call :changefileconfigldap db2cli db2cli
call :changefileconfigldap lostandfound Replication
:changefileconfigldap (
cd "%_path_tivoli%"
echo dn: cn=%2 %3,cn=Log Management,cn=Configuration > %_filename_ldapConfig%
echo changetype: modify >> %_filename_ldapConfig%
echo replace: ibm-slapdlog >> %_filename_ldapConfig%
echo ibm-slapdlog: %_path_logldap%\%1-%_date%%_time%%_extension% >> %_filename_ldapConfig%
call idsldapmodify -D cn=root -w %_password% -k -i "%_path_tivoli%\%_filename_ldapConfig%"
echo change cn: %2 %3 complete >> "%_path_logerr%\%_filename_logerr%"
goto :eof
)

แต่้ถ้าเราไม่รู้ว่าตอนนี้มี log file ชื่ออะไรบ้างที่ใช้อยู่ให้ใช้ ldapsearch ตัวอย่างเช่น
ldapsearch -D %username% -w %password% -p %port%
-b cn=Configuration -s sub cn=ibmslapd ibm-slapdLog