cn=Monitor - 日本LDAPユーザ会

OpenLDAP
トラブルの
トラブルの早期発見の
早期発見の為にできること
2010/09/10
日本LDAPユーザ会
ユーザ会
1
はじめに
本セッションでは、業務システムとも連携する、止
まって欲しくないディレクトリサーバ、OpenLDAPに
起こりえるトラブルの兆候を感じとる、monitorデー
タベースの活用方法に焦点をあてていきます
本セッションの内容は、OpenLDAP 2.4.23、CentOS 5.5
にて、動作確認を行っております
本資料での表記は、次のような感じとなっております
DB
OpenLDAP
OpenLDAP
2
目次
はじめに
monitorデータベース
定期健診
コンピュータの世界では
LAMPでは
概要
設定方法
使いどころ
終わりに
3
みなさま、
みなさま、健康診断 行ってますか?
ってますか?
4
定期的な健康診断の良いところ
早期発見
時間の経過とともに、広がっていくような病気で
あれば、早期発見、早期治療が有効
定期評価
継続的に、健康状態の評価を続けることで、長
期的な健康の維持、疾病の予防に有効
※健康診断の
健康診断の考え方には、
には、個人差があるかもしれません
個人差があるかもしれません。
があるかもしれません。あくまで、
あくまで、本セッションの
セッションの導入とお
導入とお考
とお考え下さいませ。
さいませ。
5
定期健診で、大切なこと
1.
1年に1回とか、定期的に
2.
同じ診療機関、同じ方法で健康診断を行い
結果を記録し、過去との比較ができるように
3.
結果を、しっかり確認する
4.
問題があれば、アクションをとる
※みなさま、
みなさま、こんな感
こんな感じで良
じで良いでしょうか。
いでしょうか。こちらも、
こちらも、本セッションに
セッションに限っての導入
っての導入とお
導入とお考
とお考え下さいませ。
さいませ。
6
コンピュータの
コンピュータの
世界では
世界では…?
では ?
7
どちらかというと …
キャパシティ管理、リソース監視、性能監視…な
どと、呼ばれている分野
定期的に取得したデータを蓄積しておき、リソースの利
用状況の長期的な傾向を把握することが主な目的
すぐどうって事はないけど、グラフが描けると良い世界
“障害監視” と呼ばれる分野ではない
一定の閾値を超えた場合、トラップや、メール、表示上
の色を変えるなどして通知し、早急に対処することが
目的の監視
※本セッションの
や、MIB、
、OIDなどを
などを利用
セッションの内容は
内容は、SNMPや
などを利用した
利用した監視方法
した監視方法を
監視方法を説明するものではありません
説明するものではありません。
するものではありません。
OpenLDAPサーバ
サーバに
サーバに特化した
特化した、
した、サーバプロセス内部
サーバプロセス内部の
内部の情報の
情報の取得方法を
取得方法を説明することで
説明することで、
することで、安定した
安定した運用
した運用を
運用を支援することを
支援することを目的
することを目的としています
目的としています。
としています。
8
身近な
の世界、
身近な LAMPの
世界、
内部情報の
内部情報の提供と
提供と取集
は、どうやって …?
?
9
LAMPの「L」、Linux
Procファイルシステム
# ls /proc/
1
1885
10
1891
10384 1912
10387 1950
1313 1960
1314 1970
1315 1971
1380 1979
1695 1984
1697 1993
170
2
171
2012
172
2033
173
2050
174
2055
175
2068
1785 2077
1796 2091
1823 2121
1824 2129
1831 2139
1855 2148
1870 2181
ps
2198
2228
2229
2289
2295
2296
2300
2310
2316
2319
2320
2398
2400
2401
2415
2417
2427
2428
27
27118
27120
27166
27168
27727
27879
2831
2833
29900
29902
3
30190
30213
30341
30464
317
32
33
3351
34
361
3611
362
363
367
368
369
379
392
4
4093
418
451
5
5518
5520
6
7
8
9
90
91
94
96
acpi
buddyinfo
bus
cmdline
cpuinfo
crypto
devices
diskstats
dma
driver
execdomains
fb
filesystems
fs
ide
interrupts
iomem
ioports
irq
kallsyms
kcore
key-users
keys
kmsg
loadavg
locks
mdstat
meminfo
misc
modules
mounts
vmstat
mpt
top
mtrr
net
slabtop
partitions
schedstat
scsi
self
slabinfo
stat
swaps
sar
sys
sysrq-trigger
sysvipc
mpstat
iostat
tty
uptime
version
vmcore
vmstat
zoneinfo
見やすく
出力
見やすく
出力
見やすく
出力
netstat
10
LAMPの「A」、Apache http server
mod_status、mod_info とか …
httpd
11
LAMPの「M」、MySQL
show status、show engine status とか …
MySQL
mysqld
※グラフは
Enterpriseに
に付属する
を利用し
の内部情報を
グラフは、商用版MySQL
商用版
付属する、
する、MySQL Enterprise Monitorを
利用し、MySQLの
内部情報をイメージしやすく
イメージしやすく表示
しやすく表示させたものです
表示させたものです。
させたものです。
12
LAMPの「P」、例えば…PHP
phpinfo とか…
httpd (PHP)
13
OpenLDAP?
?
14
monitor データベース
15
monitor データベースの概要
内部ステータスを管理するデータベース
OpenLDAPサーバの内部ステータスを、LDAPプ
ロトコルで公開する、バックエンドDB
config
Openldap サーバ
monitor
Bind
Search
Compare
Modify 4
monitor
bdb
ldap クライアント
16
LDAPクライアントからの、情報収集
cn=monitor 以下から、情報を取得
ほとんどのステータスは、運用属性として取得可能
ldapsearch -x -b cn=Monitor -s sub +
cn=monitor
cn=XXXX
cn=YYYY
cn=ZZZZ
cn=…
※上記ldapsearchコマンド
コマンドでの
記号は
上記
コマンドでの”+”記号
での
記号は、全ての運用属性
ての運用属性を
運用属性を要求しています
要求しています。
しています。
ldap クライアント
17
monitor データベースの内容
cn=monitor のサブエントリ
内容
RDN
cn=monitor
cn=Backends
cn=Connections
cn=Databases
cn=Listener
cn=Log
…
Backends
利用可能なバックエンドデータベース
Connections
コネクションに関連する統計情報
Databases
利用中の各バックエンドDBの情報
Listener
Log
Operations
Overlays
SASL
OpenLDAPサーバのリスニング情報
ログレベルの動的な変更
サーバ全体の、各操作の実行回数の統計
利用可能なオーバレイ機能
(未実装)
Statistics
サーバ全体の送信データ量に関する統計
Threads
ワーカースレッドの動作状況に関する情報
Time
OpenLDAPが起動した時刻、uptimeなど
TLS
(未実装)
Waiters
現時点での、送信、受信処理の実行数
18
monitor データベースの歴史
OpenLDAP 2.0系
OpenLDAP 2.1系
2.2.4にて、コンフィグのデフォルトは、--enable-monitor=[yes] に
変更
OpenLDAP 2.3系
2.1.2にて、--enable-monitor=[no] を、デフォルトのコンフィグレー
ションとして登場
OpenLDAP 2.2系
実装なし
ひたむきに成長
OpenLDAP 2.4系
monitorに詳細な情報を提供するバックエンドDBが現れた為、起動
時、ログへ「monitorを有効にして」と警告を出すことも
19
警告メッセージ
起動時、次の警告メッセージが出力される条件
…
monitoring disabled; configure monitor database to enable
…
--enable-monitor=yes でコンパイルされている
slapd.confに、database monitor の設定がない
バックエンドDB毎に、次の条件にあてはまる
bdb、hdb の場合、monitoring off の指定がない
ldap の場合、monitoring on を指定している
バックエンド
monitorへの詳細情報の提供
bdb
デフォルトで提供 (monitoring on)
hdb
デフォルトで提供 (monitoring on)
ldap
デフォルトでは提供しない (monitoring off)
20
monitor の設定
21
3ステップで、準備完了
コンパイル時に、--enable-monitor=yes を指定
OpenLDAP 2.2以降は、デフォルトでコンパイル対象
設定ファイルに、monitor DBと、ACLを追加
include
/usr/local/openldap/…/core.schema
…[略
略]…
database monitor
access to dn.subtree="cn=Monitor"
by dn.exact="cn=Admin,cn=Monitor" write
rootdn
"cn=Admin,cn=Monitor"
rootpw
secret
OpenLDAPを再起動
※本資料では
データベースへの
と、”secret”を
を利用します
本資料では、
では、これ以降
これ以降、
以降、monitorデータベース
データベースへのアクセス
へのアクセスに
アクセスに必要となる
必要となる認証
となる認証に
認証に、ここで指定
ここで指定した
指定した”cn=Admin,cn=Monitor”と
した
利用します。
します。
22
GUI ツールから、見えます
monitor、
、
出てきます
↑
23
ldapsearchして、こんな感じで
24
長期的な
長期的なトレンドを
トレンドを把握しよう
把握しよう
- OpenLDAP
25
コネクション数の傾向
OpenLDAPサーバが起動してから、これまで
の、平均コネクション数が知りたい
ある時間滞の平均コネクション数が知りたい
コネクション数の増加に、どのような傾向が
あるかを知りたい
26
コネクション数の傾向
OpenLDAPサーバへの、クライアントからの
コネクション数の傾向がわかると
メンテナンスの為の、停止計画が立てやすい
拡張計画が立てやすい
性能に関するトラブルを、未然に防げる
わからないと、
わからないと、勘や経験が
経験が重要に
重要に …
27
クライアントからの接続数
cn=Total,cn=Connections,cn=monitor の属性
cn=monitor
cn=Connections
cn=Connection XXXX
cn=Connection YYYY
cn=Max File Descriptors
属性
内容
monitorCounter
OpenLDAPサーバが起動
してから、クライアントから
の接続を確立した数の累積
cn=Total
cn=Current
28
monitorに、聴いてみよう
OpenLDAPサーバ起動後の累積コネクション
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Total,cn=Connections,cn=Monitor" ¥
> monitorCounter -LLL
(答え)
dn: cn=Total,cn=Connections,cn=Monitor
1017
1000を引いた値、17が正解
monitorCounter:
OpenLDAP 2.4.19までは、そのままの値
※openLDAP 2.4.20での
での、
サーバ内部
からカウント
での、ある修正
ある修正で
修正で、OpenLDAPサーバ
サーバ内部での
内部でのコネクション
でのコネクション数
コネクション数が、1000から
からカウントされるようになってしまいました
カウントされるようになってしまいました。
されるようになってしまいました。
29
次に、OpenLDAPサーバの時間
cn=Time,cn=monitor のサブエントリの属性
属性
cn=monitor
内容
monitorTimes OpenLDAPサーバの起動時
に、システムより取得した時刻
tamp
cn=Time
cn=Start
属性
cn=Current
monitorTimes cn=Currentへのアクセス時に、
システムより取得する、現在
tamp
cn=Uptime
内容
の時刻
属性
内容
monitoredInfo
現在の時刻から、OpenLDAP
サーバが起動した時刻を引い
た差分を秒数で表示
(cn=Current) - (cn=Start)
※上記属性の
関数で
上記属性の時間は
時間は、time(2)関数
関数でシステムより
システムより取得
より取得した
取得した時刻
した時刻が
時刻が利用されます
利用されます。
されます。仮想環境など
仮想環境など、
など、時刻が
時刻が不正確になりやすい
不正確になりやすい環境
になりやすい環境での
環境での利用
での利用にはご
利用にはご注意下
にはご注意下さい
注意下さい。
さい。
30
起動秒数と、平均コネクション数
OpenLDAPが起動している秒数、Uptime
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Uptime,cn=Time,cn=Monitor" ¥
> monitoredInfo -LLL
(答え)
dn: cn=Uptime,cn=Time,cn=Monitor
monitoredInfo:
100
起動後からの平均コネクション数
累積コネクション数 / Uptime
17 / 100 =
0.17[conn/sec]
31
ある期間の平均コネクション数
10分毎に、コネクションの累積数を確認
t-1
10分
分
1020 [conn]
t
1124 [conn]
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Total,cn=Connections,cn=Monitor" ¥
> monitorCounter -LLL
ある10分間の平均コネクション数
1124 – 1020
= 0.1733 [conn/sec]
600
32
OpenLDAPサーバ全体の処理数
サーバ起動後からの処理の傾向を知りたい
どんな処理が多いのか
参照系、更新系処理の割合
ある時間帯での処理の傾向を知りたい
処理の増加傾向があれば、知りたい
33
OpenLDAPサーバ全体の処理数
サーバ単位での処理の傾向がわかると
少ないセッションでも高負荷な時間が把握できる
どんな拡張や負荷分散が良いかを検討できる
バックアップに適した時間がわかる
わからないままでの運用
わからないままでの運用は
運用は、不安 …
34
monitorによる処理数のカウント
cn=Operations,cn=monitorと サブエントリの属性
cn=monitor
属性
内容
monitorOpInitiated
OpenLDAPサーバ全体で、開
始された、全ての処理数
monitorOpCompleted OpenLDAPサーバ全体で、完
了した、全ての処理数
cn=Operations
cn=Bind
~
~
cn=Unbind cn=Modrdn
cn=Search
cn=Add
cn=Compare cn=Delete
cn=Modify cn=Extended
属性
内容
monitorOpInitiat
ed
当該の処理が、
OpenLDAPサーバ全体で、
開始された数
monitorOpCompl 当該の処理が、
OpenLDAPサーバ全体で、
eted
完了した数
35
サーバ全体の個別操作の統計
サーバ起動後からの、個々の操作の完了数
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Operations,cn=Monitor" -s one ¥
> monitorOpInitiated monitorOpCompleted -LLL
dn: cn=Bind,cn=Operations,cn=Monitor
monitorOpInitiated: 39
monitorOpCompleted:
39
…[略]…
dn: cn=Search,cn=Operations,cn=Monitor
monitorOpInitiated: 43
monitorOpCompleted:
…[略]…
42
36
ある期間の、サーバ全体の統計
ある期間での、個別、または全てのオペレー
ションが完了した数
monitorOp
Completed
116
154
235
未来
Uptime
600
660
720
未来
t-2
t-1
t
t+1
完了した
完了したオペレーション
したオペレーション
サーバの
サーバの起動時間
ある操作の、ある期間の平均は…
monitorOpCompleted(t)
– monitorOpCompleted(t-1)
Uptime(t) – Uptime(t-1)
37
トラブルの
トラブルの芽は、摘んでおこう
-
38
クライアントからの最大接続数
同時接続可能なクライアント数が分からない
同時接続可能なクライアント数には制限がある
実際は、利用可能なファイルディスクリプタ数の制限
Linuxのデフォルトは、1024 とか
OpenLDAP起動前に、シェルから変更可能
ulimit -n 8192; ./libexec/slapd …とか
39
ファイルディスクリプタ数の制限
ファイルディスクリプタ数の制限を超えると、
新しく接続するクライアントは、接続待ちに
接続中のクライアントが終了し、ファイルディスク
リプタが利用可能になるまで、接続待ち
クライアント側では、レスポンスタイムの悪化に
クライアントからの
クライアントからの接続数
からの接続数の
接続数の上限、
上限、知りたい
40
最大接続数に関する情報
cn=Connections,cn=monitor サブエントリの属性
cn=monitor
cn=Connections
cn=Connection XXXX
属性
内容
monitorCounter
現在、起動している
OpenLDAPサーバが、利
用可能なファイルディスクリ
プタの数
属性
内容
monitorCounter
起動しているOpenLDAP
サーバに、現在、接続して
いるクライアントの数
cn=Connection YYYY
cn=Max File Descriptors
cn=Total
cn=Current
41
利用可能なファイルディスクリプタ数
monitorに、聴いてみよう
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Max File Descriptors,cn=Connections,cn=Monitor" ¥
> monitorCounter -LLL
(答え)
dn: cn=Max File Descriptors,cn=Connections,cn=Monitor
monitorCounter:
8192
※既に、接続数が
データベースに
接続数が上限に
上限に達している場合
している場合は
場合は、monitorデータベース
データベースに接続できません
接続できません。
できません。これは、
これは、接続数が
接続数が上限に
上限に達することを予防
することを予防する
予防する為
する為の確認方法です
確認方法です。
です。
接続数が
接続数が上限に
上限に達している場合
している場合は
場合は、サーバ機
サーバ機にログインした
ログインした後
した後、cat /proc/`cat slapd.pid`/limits などを用
などを用いて確認下
いて確認下さい
確認下さい。
さい。
42
現時点での、同時接続数
monitorに、聴いてみよう
$ ldapsearch -x ¥
> -D cn=Manager,dc=my-domain,dc=com -w secret ¥
> -b "cn=Current,cn=Connections,cn=Monitor" ¥
> monitorCounter -LLL
(答え)
dn: cn=Current,cn=Connections,cn=Monitor
monitorCounter:
1
今、この接続だけ
8192 - 1 = 8191
※接続数が
データベースに
接続数が、利用可能な
利用可能なファイルディスクリプタの
ファイルディスクリプタの上限に
上限に達している場合
している場合は
場合は、monitorデータベース
データベースに接続できません
接続できません。
できません。これは、
これは、予防目的での
予防目的での同時接続数
での同時接続数の
同時接続数の確認です
確認です。
です。
接続数が
、lsof、
、…などを
などを用
接続数が、利用可能な
利用可能なファイルディスクリプタの
ファイルディスクリプタの上限に
上限に達している場合
している場合は
場合は、サーバ機
サーバ機にログインした
ログインした後
した後、netstart、
などを用いて確認下
いて確認下さい
確認下さい。
さい。
43
ファイルディスクリプタは
コネクションの
サーバが
ファイルにも
ファイルディスクリプタは、クライアントと
クライアントと確立する
確立するTCP/IPコネクション
する
コネクションの他、OpenLDAPサーバ
サーバがオープンする
オープンするファイル
するファイル、
ファイル、例えば.bdbファイル
えば
ファイルにも消費
にも消費されています
消費されています。
されています。
各コネクション動作概要
思っていたより、同時接続数が多い気がする
どんなクライアントが接続しているのか知りたい
無駄に長い接続を維持しているクライアントがい
ないか確認したい
しっかり、処理を繰り返していて接続が長いの?
それとも、ただ、つながってるだけなの?
44
各コネクション動作概要
どんなクライアントが、どんな内容の接続を
維持しているかがわかると、対処しやすい
ulimit -n で対処するか …
idletimeout、writetimeout で対処するか …
クライアント側で、処理を見直すか …
わからないと、
わからないと、ベストな
ベストな対処を
対処を選択できない
選択できない
※idletimeoutは
は、OpenLDAPサーバ
サーバに
サーバに接続したまま
接続したまま何
したまま何も操作を
操作を行っていないクライアント
っていないクライアントを
クライアントを、一定の
一定の秒数が
秒数が経過した
経過した後
した後に切断する
切断する為
する為のディレクティブです
ディレクティブです。
です。
また、
は、OpenLDAPサーバ
サーバからの
また、writetimeoutは
サーバからのデータ
からのデータ送信
データ送信が
送信が、一定秒数以上経過しても
一定秒数以上経過しても完了
しても完了しない
完了しない場合
しない場合に
場合に中止する
中止する為
する為のディレクティブです
ディレクティブです。
です。
45
各コネクションに関する情報
cn=Connection XXXX の属性
属性
内容
monitorConnectio
nNumber
コネクション番号。ログファイル
の「conn=xxxx」と同じ番号
monitorConnectio
nProtocol
当該のコネクションが利用して
いる、プロトコルバージョン
cn=Connection XXXX
monitorConnectio
nOpsReceived
当該コネクションから受信した
操作(Bind、Searchなど)の数
cn=Connection YYYY
monitorConnectio
nOpsExecuting
当該のコネクションから受信し
た操作を、実行している数
monitorConnectio
nOpsPending
当該のコネクションから受信し
た操作を、実行待ちしている数
monitorConnectio
nOpsCompleted
当該コネクションから受信した
操作が、完了した数
cn=monitor
cn=Connections
cn=Connection
X
cn=Max File Descriptors
は、現時点での
現時点での、
での、接続
cn=Total
数分だけ
繰り返し出現
数分だけ繰
だけ
cn=Current
…
46
各コネクションに関する情報 (2)
cn=Connection XXXX の属性
属性
内容
monitorConnectionGet
当該のコネクションで、connection_get()関数が
利用された回数(connection_read()と、
connection_write()が利用された回数の合計)
monitorConnectionRead
当該のコネクションで、データ受信処理を行う、
connection_read()関数が利用された回数
monitorConnectionWrite
当該のコネクションで、データ送信処理を行う、
connection_write()関数が利用された回数
monitorConnectionMask
当該コネクションの状態をマスクして表示 (r:受信
可能な状態、w:送信中、x:実行中の操作あり、p:
実行待ちの操作あり、S:SASL認証中 …など)
connection_read()
ldap
クライアント
…
Bind
Search
Connection XXXX
Entry Entry
connection_write()
Openldap サーバ
47
各コネクションに関する情報 (3)
cn=Connection XXXX の属性
属性
内容
monitorConnectionAuthzDN
当該のコネクションで、認証されたDN
monitorConnectionListener
当該のコネクションが接続した、リスナーの
URL(リスニングするIPアドレスと、ポート番号)
monitorConnectionPeerDomain
当該のコネクションの、接続元ドメイン
monitorConnectionPeerAddress
当該のコネクションの、接続元IPアドレスと、
ポート番号
monitorConnectionLocalAddress 当該のコネクションが接続した、ソケット情報
(バインドしているIPアドレスと、ポート番号)
…
Connection XXXX
ldap クライアント
Openldap サーバ
48
各コネクションに関する情報 (4)
cn=Connection XXXX の属性
属性
内容
monitorConnectionStartTime
当該のコネクションが、開始された時刻
monitorConnectionActivityTime
当該のコネクション内での、直近の操作(Bind、
Search、Add、modify、Deleteなど)の開始時刻
Accept、
、Bind
Search 2回目
回目
Search 1回目
回目
5秒
秒
5秒
秒
Connection XXXX
ConnectionStartTime
20100819074947Z
ConnectionActivityTime 20100819074947Z
5秒
秒
(そのまま)
(そのまま)
20100819074952Z 20100819074957Z
5秒
秒
49
あるコネクションの状態チェック
特定のコネクションの動作状況が気になる
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Connection XXXX,cn=Connections,cn=Monitor" + -LLL
…[略]…
monitorConnectionOpsReceived: 2
オペレーションの
オペレーションの実行状況
monitorConnectionOpsExecuting: 1
monitorConnectionOpsPending: 0
monitorConnectionOpsCompleted: 1
認証ユーザ
認証ユーザ、
ユーザ、コネクション情報
コネクション情報
…[略]…
monitorConnectionAuthzDN: uid=xx,ou=yy,dc=zz,dc=com
monitorConnectionListener: ldap:///
monitorConnectionPeerDomain: unknown
monitorConnectionPeerAddress: IP=10.x.x.x:42947
monitorConnectionLocalAddress: IP=0.0.0.0:389
コネクション開始日時
コネクション開始日時
monitorConnectionStartTime: 20100819074947Z
monitorConnectionActivityTime: 20100819074947Z
オペレーション開始日時
オペレーション開始日時
50
気になるものは、複数回チェック
複数回のチェックで、状態の変化が判明
1回目 2回目 3回目 4回目
conn=XXXX
Op=1
Op=1
Op=1
Op=1
conn=YYYY
Op=3
Op=4
Op=4
終了
conn=ZZZZ
Op=0
Op=1
Op=2
終了
Op=?
Op=?
ActivityTimeと
と操作番号が
操作番号が、前回と
前回と変わっていないコネクション
わっていないコネクション
ActivityTimeと
と操作番号が
操作番号が変わっているか、
わっているか、接続直後の
接続直後のコネクション
※このように、
このように、状態の
状態の変化を
変化を確認することで
確認することで、
することで、調査対象とする
調査対象とするコネクション
とするコネクションを
コネクションを、ある程度
ある程度、
程度、絞り込むことができます。
むことができます。
ここでは、
のスレッドダンプや
の「show processlist;」
」を数回実行するような
ここでは、Javaの
スレッドダンプや、MySQLの
数回実行するような、
するような、動作状況の
動作状況の変化を
変化を確認する
確認するデバック
するデバック方法
デバック方法を
方法をイメージ下
イメージ下さい。
さい。
51
突然デバック
突然デバックしたい
デバックしたい、
したい、あなたに …
-
52
ログの出力レベルと、デバック
ログの出力量があまりに多く、デフォルトの
stats(256)から、stats2(512)等に変更した
ログファイルへの出力量は減ったけど …
誰が、何処から接続しているかわからない
気になる接続は、どう追跡すればいいの?
53
起動中、ログレベルは変更可能
Trace
Packets
Args
Conns
BER
Filter
Config
ACL
Stats
Stats2
Shell
Parse
Sync
cn=monitor
cn=Log
属性
内容
managedInfo
(ユーザ属性)
実行中に、ログの出力
レベルを、文字列で指
定して変更可能
Openldap サーバ
54
一時的な、ログレベルの変更例
OpenLDAPサーバの起動中に、外部から、
ログレベルを、一時的に変更できます
vi log.ldif
dn: cn=Log,cn=Monitor
changetype: modify
add: managedInfo
managedInfo: ACL
managedInfo: Stats
dn: cn=Log,cn=Monitor
changetype: modify
replace: managedInfo
managedInfo: Stats
ldapmodify -x -D cn=Admin,cn=Monitor -w
secret -f log.ldif
※monitorデータベース
データベースからの
サーバの
データベースからのログレベル
からのログレベルの
ログレベルの変更は
変更は、一時的な
一時的な変更であり
変更であり、
であり、OpenLDAPサーバ
サーバの再起動後は
再起動後は、変更内容は
変更内容は維持されません
維持されません。
されません。恒久的な
恒久的なログ
レベルの
のloglevelディレクティブ
ディレクティブをご
レベルの設定には
設定には、
には、slapd.confの
ディレクティブをご利用下
をご利用下さい
利用下さい。
さい。
55
チューニング中
チューニング中の、あなたに …
-
56
キャッシュ領域の利用状況
バックエンドDB(BDB、HDB)に設定した、
キャッシュ領域の利用状況を確認したい
エントリキャッシュ
IDリストキャッシュ
不足して、キャッシュ領域と、Berkeley DB間
で入れ替えが発生していないだろうか…?
57
cn=Databases,cn=monitor
cn=Database X が、bdb、hdbの場合の属性
cn=monitor
“Database 1”が
が、bdb、
、またはhdbである
である場合
または
である場合
属性
cn=Databases
バックエンド共通
バックエンド共通の
共通の設定
cn=frontend
config データベース
cn=Database 0
内容
olmBDBEntryCache エントリキャッシュの利用数
olmBDBDNCache
DNキャッシュの利用数
olmBDBIDLCache
IDリストキャッシュの利用数
olmDbDirectory
データディレクトリ
cn=Database 1
cn=Database 2
cn=Database 3
実行時に
で指定した
実行時に、slapd.confで
指定した
バックエンドDBの
バックエンド の数だけ繰
だけ繰り返し出現
58
実際のエントリキャッシュの状態
エントリ情報を、OpenLDAP側でデコードして、
キャッシュする領域の空き状態は?
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Database 1,cn=Databases,cn=Monitor" ¥
> olmBDBEntryCache -LLL
(答え)
dn: cn=Database 1,cn=Databases,cn=Monitor
Entry 1
まだ、 1 つだけ
olmBDB
Cache:
※Berkeley DBから
から取得
サーバ側
エントリまでが
から取得した
取得したエントリ
したエントリは
エントリは、OpenLDAPサーバ
サーバ側にデフォルトで
デフォルトで1000エントリ
エントリまでがキャッシュ
までがキャッシュされます
キャッシュされます。
されます。チューニングの
チューニングの観点からは
観点からは、
からは、
バックエンドDBに
ディレクティブを
バックエンド に格納された
格納されたエントリ
されたエントリと
エントリと同数の
同数の値を設定することが
設定することが推奨
することが推奨されています
推奨されています。
されています。バックエンドDB毎
バックエンド 毎に、cachesizeディレクティブ
ディレクティブを用いて調整下
いて調整下さい
調整下さい。
さい。
59
実際のIDリストキャッシュの状態
インデックスファイルから取得したIDリストを、
OpenLDAP側で保持する領域の空きは?
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Database 1,cn=Databases,cn=Monitor" ¥
> olmBDBIDLCache -LLL
(答え)
dn: cn=Database 1,cn=Databases,cn=Monitor
IDL 1
まだ、 1 つだけ
olmBDB
Cache:
※インデックスに
ディレクティブで
インデックスに紐づく id のリストは
リストは、デフォルトでは
デフォルトではキャッシュ
ではキャッシュされない
キャッシュされない設定
されない設定となっています
設定となっています。
となっています。バックエンドDB毎
バックエンド 毎に、idlcachesizeディレクティブ
ディレクティブで調整下さい
調整下さい。
さい。
パフォーマンスチューニングの
ではエントリ
ではエントリ
倍の値を設定することが
パフォーマンスチューニングの観点からは
観点からは、
からは、bdbでは
ではエントリ数
エントリ数と同数。
同数。hdbでは
ではエントリ数
エントリ数の3倍
設定することが推奨
することが推奨されています
推奨されています。
されています。
60
思い出せない、
せない、あなたに …
- IP
DB
61
利用可能なバックエンドDB
コンフィグレーション時の設定を忘れた!
config.log もない!
make clean とか、
もう一度 ./configure して上書きしているとか…
今動いているOpenLDAPサーバで、使える
バックエンドデータベースが、わからない …
62
コンパイルオプション、ありすぎ
No.
1
2
3
4
5
6
7
…
オプション
enable-backends
enable-bdb
enable-dnssrv
enable-hdb
enable-ldap
enable-meta
enable-monitor
15 enable-sql
- (config)
デフォルト
no
yes
no
yes
no
no
yes
no
(yes)
備考
全部含めるかどうか
Berkeley DB
DNS
hierarchical DB
LDAP検索するプロキシ
LDAP検索するプロキシ
モニタ
RDBMS
(選択不可)
63
cn=Backends,cn=monitor
cn=Backends,cn=monitor とサブエントリの属性
cn=monitor
cn=Backends
属性
内容
monitoredInfo
OpenLDAPサーバに、コンパ
イルされ組み込まれているか、
実行時にロードされている
バックエンドDB
cn=Backend 0
cn=Backend 1
実行時に
実行時に利用可能な
利用可能なバックエンド
DBの
の種類の
種類の数だけ繰
だけ繰り返し出現
cn=Backend 2
属性
内容
monitoredInfo
各バックエンドDBの名前。Backend 0は、config
monitorRuntimeConfig
実行時、構成可能か。TRUE / FALSE で表示
supportedControl
当該のバックエンドDBでサポートされるコントロール
64
今、構成可能なバックエンドDB
monitorデータベースに、聴いてみよう
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Backends,cn=Monitor" -s base monitoredInfo -LLL
(答
答え)
dn: cn=Backends,cn=Monitor
monitoredInfo: config
monitoredInfo: ldif
monitoredInfo: monitor
monitoredInfo: bdb
monitoredInfo: hdb
monitoredInfo: …
65
利用可能なオーバレイ機能
コンフィグレーション時の設定を忘れた!
config.log もない!
make clean とか、
もう一度 ./configure して上書きしているとか…
今動いているOpenLDAPサーバで、使える
オーバレイ機能が、わからない …
66
コンパイルオプション、ありすぎ
No.
1
2
3
オプション
enable-overlays
enable-accesslog
enable-auditlog
デフォルト
no
no
no
4
no
5
no
…
no
18
19
20
21
-
enable-syncprov
enable-translucent
enable-unique
enable-valsort
(glue)
yes
no
no
no
(yes)
備考
全部含めるかどうか
アクセスログ
監査ログ
(唯一のデフォルトyes)
上書き可能なプロキシ
属性値がユニークか
複数の属性値のソート
(選択不可)
67
cn=Overlays,cn=monitor
cn=Overlays,cn=monitor とサブエントリの属性
cn=monitor
属性
内容
monitoredInfo
OpenLDAPサーバに、コンパ
イルされ組み込まれているか、
実行時にロードされている
オーバーレイ機能
cn=Overlays
cn=Overlay 0
cn=Overlay 1
実行時に
実行時に利用可能な
利用可能な、
オーバレイ機能
オーバレイ機能の
機能の数だけ出現
だけ出現
cn=Overlay 2
属性
内容
monitoredInfo
各オーバレイ機能の名前
monitorRuntimeConfig
実行時、構成可能か。TRUE / FALSE で表示
68
今、構成可能なオーバレイ機能
monitorデータベースに、聴いてみよう
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Overlays,cn=Monitor" -s base monitoredInfo -LLL
(答
答え)
dn: cn=Overlays,cn=Monitor
monitoredInfo: glue
monitoredInfo: syncprov
あ、デフォルトだった …
69
IP、ポートのリスニング状況
確認したいけど …
起動パラメータを忘れた
slapd –h ldap://xx.xx.xx.xx:port/ … とかで起動し
たっけ?
OpenLDAPサーバのマシンにログインして、起動
時に与えたパラメータとかを確認したくない
ps -eo args | grep slapd とか、netstat とかイヤ
70
OpenLDAPのリスニング設定
運用上の理由、セキュリティ上の理由により、
OpenLDAPサーバの管理者は、リスニングす
るIPアドレス、ポート番号を調整可能
IP:xx.xx.xx.X
IP:xx.xx.xx.1
IP:xx.xx.xx.2
Port:389? 636?
IP:xx.xx.xx.3
IP:xx.xx.xx.4
IP
71
cn=Listeners,cn=monitor
cn=Listeners,cn=monitor のサブエントリの属性
cn=monitor
属性
内容
labeledURI
(ユーザ属性)
OpenLDAPサーバのリスニン
グ情報を、URLで表記
デフォルトは、ldap:///
cn=Listeners
cn=Listener 0
cn=Listener 1
cn=Listener 2
属性
デフォルト、
デフォルト、または、
または、OpenLDAP
起動時に
起動時に -h URLs で指定した
指定した、
した、
リスニングする
の数だけ出現
リスニングするURLの
する
だけ出現
例) slapd -h “xx.xx.xx.xx:389 yy.yy.yy.yy:389”
内容
monitorConnectionLocalAddress IP=address:port と、リスニング情報を表記
デフォルトは、[::]:389と、0.0.0.0:389
monitoredInfo
ldapsでリスニングの場合、”TLS”と表示
72
実際にリスニングするIPとポート
monitorデータベースに、聴いてみよう
$ ldapsearch -x ¥
> -D cn=Admin,cn=Monitor -w secret ¥
> -b "cn=Listeners,cn=Monitor" -s one ¥
> monitorConnectionLocalAddress labeledURI -LLL
(答
答え)
dn: cn=Listener 0,cn=Listeners,cn=Monitor
labeledURI: ldap:///
monitorConnectionLocalAddress: IP=0.0.0.0:389
IPバインドなし
ポートも389だけ
※上記の
データベースへ
上記の内容は
内容は、全くリスニングする
リスニングするIPアドレス
する アドレス、
アドレス、ポート番号
ポート番号がわからず
番号がわからず、
がわからず、monitorデータベース
データベースへ接続できない
接続できない状況
できない状況を
状況を想定したものではありません
想定したものではありません。
したものではありません。
73
monitorデータベース
データベースに
、netstatコマンド
コマンドなどを
サーバの
データベースに接続できない
接続できない場合
できない場合は
場合は、サーバ機
サーバ機にログインし
ログインし、ps、
コマンドなどを用
などを用いてOpenLDAPサーバ
いて
サーバのリスニング情報
リスニング情報をご
情報をご確認下
をご確認下さい
確認下さい。
さい。
終わりに …
74
monitor データベース参考情報
マニュアル
README
man doc/man/man5/slapd-monitor.5 [*]
説明
less servers/slapd/back-monitor/README [*]
man
http://www.openldap.org/doc/admin24/monitoringslapd.html
ldapsearch -x -b "cn=Monitor" description
ソースコード
ls servers/slapd/back-monitor/ [*]
※ [*] 印の付いたコマンド
いたコマンド実行時
コマンド実行時の
実行時の各ファイルへの
ファイルへのパス
へのパスは
パスは、tar zxvf openldap-2.4.23.tgz; cd openldap-2.4.23 からとなります。
からとなります。
75
ご清聴、
清聴、ありがとうございました!
ありがとうございました!
76