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
© Copyright 2024 Paperzz