跟踪OpenLDAP服务器性能

标签: 跟踪 openldap 服务器 | 发表时间:2014-05-03 02:18 | 作者:wilbertzhou
出处:http://blog.csdn.net

原文: http://prefetch.net/articles/monitoringldap.html

 

LDAP已经成为互联网标准的目录访问协议,并且用于访问一切从DNS区域文件到用户帐户信息。随着企业和软件供应商更多地依赖于LDAP目录服务器,需要测量服务器的吞吐量和性能变得势在必行。本文将介绍可用于监视LDAP目录服务器的运行状况和性能优化的工具,并且将解释随着时间的推移ORCA如何越来越多地应用到目录服务器的性能监测中。

日志


在诊断一个LDAP服务器性能的时候,一开始通常是查看日志文件。 OpenLDAP服务器提供了一个灵活的日志子系统,并定义了几种日志级别来控制日志文件的详细程度:

 级别  描述

-1    启动所有调试

0     不输出调试

1     跟踪功能调用

2     调试数据包处理

4     深度跟踪调试

8     连接管理

16    打印数据包发送和接收

32    查询过滤器处理

64    配置文件处理

128   访问控制列表处理

256   统计日志连接/操作/结果

512   发送统计日志条目

1024  打印与shell后端的通信

2048  打印条目解析调试

 每个日志级别都可以附加,并且可以通过slapd.conf的“loglevel”指令进行配置,或者作为参数“-d”选项传递给slapd。下面的示例演示如何记录访问控制列表和搜索过滤器处理的详细信息:

 $ slapd -4 -f /etc/slapd.conf -u openldap -g openldap \

  -h "ldap://ldap.prefetch.net  ldaps://ldap.prefetch.net" -d 160

 OpenLDAP将默认记录所有信息到syslog的LOCAL4设备。如果你想使用一个不同的设备,你可以通过slapd的“-l”选项配置设备名。

跟踪操作时间


当LDAP客户机和服务器通过路由器和防火墙分隔时,偶尔发生的网络问题(例如,丢失的TCP段或损坏的CRC)可能会导致应用程序意外的行为。为了帮助衡量一个LDAP客户机和服务器之间的延迟,我们开发了 ldap-ping.pl。ldap-ping.pl是用Perl编写的,并且依赖于Time::HiRes, Getopt::Std, Net::LDAP 和Net::LDAPS模块。

ldap-ping.pl的工作原理是打开一个TCP连接到目录服务器,发出匿名绑定,搜索RootDSE,并从服务器取消绑定。这些操作使用Perl的高分辨率计时器进行测量,并以“ping”的格式进行显示:

 $ ldap-ping.pl -s ldap.prefetch.net -p 389 -d 10

Querying LDAP server ldap.prefetch.net:389 every 10 seconds (Ctrl-C to stop):
Fri Nov 12 16:42:14 2004: new=0.025s, = bind=0.008s, search=0.067s, unbind=0.003s [local port=50377] [Normal Delay]
Fri Nov 12 16:42:25 2004: new=0.011s, = bind=0.001s, search=0.015s, unbind=0.001s [local port=50378] [Normal Delay]
Fri Nov 12 16:42:35 2004: new=0.010s, = bind=0.002s, search=0.015s, unbind=0.001s [local port=50379] [Normal Delay]
Fri Nov 12 16:42:45 2004: new=0.009s, = bind=0.002s, search=0.015s, unbind=0.001s [local port=50380] [Normal Delay]

 ldap-ping.pl脚本接受三个参数; “-s”选项表示连接到的服务器,“-p”选项指定目录服务器监听的TCP端口,而“-d”选项允许管理员指定探测之间的延迟。如果存在二进制pfiles文件,脚本也将打印本地端口号。

跟踪性能


OpenLDAP服务器可以被配置为通过monitor branch的指令提供实时的性能统计数据。目前可用的统计信息包括:发送的字节数,返回到客户机的条目,连接到服务器的总数,当前活动的连接,读写等待者,和个别的操作(例如,读取、搜索、修改)故障。下面的例子展示了slapd.conf中设置monitor branch的指令,并限制读取访问的IP地址为192.168.1.8:

 database                   monitor

 
access to dn="cn=monitor"
        by peername=192.168.1.8   read
        by * none

 一旦配置了monitor branch,我们可以使用“ldapsearch”工具查看所有可用的统计数据:

 $ ldapsearch -x -b "cn=monitor"-H ldaps://ldap.prefetch.net objectclass=*

 我们可以也通过调整search base 获取个别统计信息:

 $ ldapsearch -LLL -x -b "cn=Current,cn=Connections,cn=Monitor" -H ldaps://ldap.prefetch.net objectclass=*

dn: cn=Current,cn=Connections,cn=Monitor
objectClass: top
objectClass: monitor
objectClass: extensibleObject
cn: Current
description: 46
 

收集性能数据


使用ldapsearch实用程序可以让我们收集到某个时间点的性能指标快照,但是我们怎样才能利用历史数据呢?为了解决这个问题,我开发了 ldap-gather.pl。ldap-gather.pl脚本从monitor branch收集统计信息,并将其写入到传递的目录参数中:

 $ ldap-gather.pl -s ldap.prefetch.net -p 389 -d /usr/local/orca/var/orca/ldapallator/ldap.prefetch.net:389

 初始调用ldap-gather.pl将产生一个文本文件,包含一行描述数据头,及一行实际数据:

 TIMESTAMP TOTAL_CONNECTIONS BYTES_SENT COMPLETED_OPERATIONS REFERRALS_SENT ENTRIES_SENT BIND_OPERATIONS UNBIND_OPERATIONS ADD_OPERATIONS DELETE_OPERATIONS MODIFY_OPERATIONS COMPARE_OPERATIONS SEARCH_OPERATIONS

1100656501 118 649271 165 0 4620 24 24 0 0 0 0 117

 如果数据文件不存在,ldap-gather.pl脚本将创建一个新的数据文件,如果该文件存在,将追加新的数据。该文件名包含单词“ldapallator”和一个日期戳(例如,filename -YYYY-MO-DD-INDEX):

 $ ls -la | tail -1

-rw-r--r--   1 orca     other       6424 Nov 29 17:25 ldapallator-2004-10-29-000

 若要自动在相同的时间间隔采集数据,我们可以设置一个cron作业运行ldap -gather.pl:

 5,15,25,35,45,55 * * * * sh -c "/usr/local/etc/ldap-gather.pl

                            -s ldap.prefetch.net 
                            -p 389 -d /usr/local/orca/var/orca/ldapallator/ldap.prefetch.net:389"

 这将使ldap-gather.pl每十分钟收集一次性能数据。一旦数据被捕获,我们可以使用ORCA来生成图表性能报告。

把LDAP性能数据生成图表


该ORCA包中包含了一组Perl脚本和配置文件来绘制任意数据。 ORCA使用RRD存储数据,并配置了一个配置文件。 ORCA采用了典型的“configure”,“make”和“make install”步骤构建软件包。 ORCA的Perl脚本使用Data::Dumper、Digest::MD5、Math::IntervalSearch、 RRD和Storable模块,使用“makemodules_install”选项与现有的Perl安装整合。一旦安装完成,可以执行“orca”,以确保成功地完成了构建过程:

 $ /usr/local/orca/bin/orca

/usr/local/orca/bin/orca: no configuration file specified
usage: /usr/local/orca/bin/orca [options] configuration_file
Options:
  -daemon           Run Orca in daemon mode
  -gifs             Output GIFs instead of PNGs
  -logfile filename Output all messages
  -no-html          Update RRD files and images but not HTML files
  -no-images        Update RRD files but not image and HTML files
  -once             Run only once and do not continue to monitor input files
  -verbose          Verbose; list multiple times for increased verbosity
Orca understands the first unique command line option, i.e. -d for -daemon.

 如果Perl解释器无法找到所需的模块之一,你会看到各种各样的控制台上的错误,并且进程将退出。一旦Perl解释器执行正常,我们可以创建一个ORCA配置文件,并开始收集ldap-gather.pl的数据以便进一步分析。

ORCA配置文件包含需要找到和生成图形数据的指令。该配置文件包含三个主要部分,第一部分定义了几个变量(例如,base_dir,rrd_dir,html_dir),用于控制RRD和图像文件的存储位置。本节还包含几个变量来定义ORCA生成的网页格式。

第二部分包含了一系列的“group”条目,它定义了生成图表的数据。匹配由ldap-gather.pl收集到的文件的样本组条目如下图所示:

 group ldapallator {

find_files              /usr/local/orca/var/orca/ldapallator/(.*)/(?:ldapallator)-\d{4}-\d{2}-\d{2}(?:-\d{3,})?(?:\.(?:Z|gz
|bz2))?
column_description      first_line
date_source             column_name TIMESTAMP
interval                600
filename_compare        sub {
                          my ($ay, $am, $ad) = $a =~ /-(\d{4})-(\d\d)-(\d\d)/;
                          my ($by, $bm, $bd) = $b =~ /-(\d{4})-(\d\d)-(\d\d)/;
                          if (my $c = (( $ay       <=>  $by) ||
                                       ( $am       <=>  $bm) ||
                                       (($ad >> 3) <=> ($bd >> 3)))) {
                            return 2*$c;
                          }
                          $ad <=> $bd;
                        }
}

 在这个例子中,“find_files”关键字告诉ORCA什么文件作为输入使用(该文件与一个正则表达式匹配)。“interval”关键字定义的秒数表示在这组数据文件更新之间的间隔时间,而“column_description”描述的是列描述的位置。“column_description”值“first_line”表示该栏位说明将位于每个文件的第一行。

第三部分包含了一组plot表示图表的各条目。下面的例子显示了需要​​绘制目录服务器的连接数的指令:

 plot {

title                   %g Total Connections
source                  ldapallator
data                    TOTAL_CONNECTIONS
data_type               derive
line_type               line2
legend                  Connections
y_legend                Connections
data_min                0
}

  “plot”关键字定义一个新的图,其中包含指定的标题“title”,“source”关键字表示此图来源的“group”条目。每个图形使用“data”关键字按名称来引用数据的特定列(例如,TOTAL_CONNECTIONS是ldap-gather.pl收集的每个数据文件的列);“data_type”关键字指定数据是否会被绘制为绝对值,以前的值的衍生物,或一个计数器。曲线图的X轴的值可以用“data_min”和 “data_max”控制;最后在ORCA创建的PNG文件中可读的图例描述。

可以调用ORCA来一次性处理数据并退出,或设置以一个守护进程运行,不断检查是否有新的数据。下面的示例运行ORCA一次性处理自上次调用以来所有的数据:

 $ /bin/sh -c "cd /usr/local/orca &&/usr/local/orca/bin/orca -once /usr/local/orca/lib/ldapallator.cfg"

 如果ORCA成功运行,会在“html_dir”目录中生成HTML和PNG文件。如果您不想以守护进程运行ORCA,你需要添加一个cron作业以便在相同的时间间隔内循环来处理的文件:

 0 0 * * * /bin/sh -c "cd /usr/local/orca &&/usr/local/orca/bin/orca -once

         /usr/local/orca/lib/ldapallator.cfg" > /dev/null 2>&1

 该命令执行将在半夜运行ORCA的日常作业,并处理前一天的数据。 图3包含了一个完整的ORCA配置文件,图4,图5和6包含ORCA的连接总数、总运行数和返回的条目数的图表。

图4连接总数


图5 运行总数


图6 返回的条目数

结论


本文提供的几种监视LDAP服务器技术的概述。在我们的例子中我们用的是OpenLDAP服务器,但这些技术也适用于商业目录服务器。有关ORCA的其他信息,它可以被用来绘制任意数据,以及其它的方面,请参见参考资料。如果您对本文章存在疑问或意见,请随时给作者发 E-mail

参考


这篇文章参考了下面的内容:

致谢


感谢克莱麦克卢尔的ldap-ping.pl原创作品,还要感谢ORCA和OpenLDAP团队成员的卓越贡献!

作者:wilbertzhou 发表于2014-5-2 18:18:22 原文链接
阅读:77 评论:0 查看评论

相关 [跟踪 openldap 服务器] 推荐:

跟踪OpenLDAP服务器性能

- - CSDN博客系统运维推荐文章
原文: http://prefetch.net/articles/monitoringldap.html. LDAP已经成为互联网标准的目录访问协议,并且用于访问一切从DNS区域文件到用户帐户信息. 随着企业和软件供应商更多地依赖于LDAP目录服务器,需要测量服务器的吞吐量和性能变得势在必行. 本文将介绍可用于监视LDAP目录服务器的运行状况和性能优化的工具,并且将解释随着时间的推移ORCA如何越来越多地应用到目录服务器的性能监测中.

Erlang服务器内存耗尽bug跟踪过程

- chuang - Erlang Display - 不求完美,学以致用
本文描述朋友Erlang服务器内存耗尽bug的解决过程. 首先说明一下问题,服务器1千多人在线,16G内存快被吃光. 查看节点的内存消耗在什么地方?. 显示内存大部分消耗在进程上,由此确定是进程占用了大量内存. (以输出text方式启动etop,其间隔为1秒,输出行数为20行,按照内存排序. 这里spawn一个新进程,目的是输出etop数据时不影响erlang shell 输入.).

Servlet – 会话跟踪

- - ImportNew
HTTP本身是 “无状态”协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连接的内容.因此如果判断两次连接是否是同一用户, 就需要使用 会话跟踪技术来解决.常见的会话跟踪技术有如下几种:. URL重写: 在URL结尾附加. 会话ID标识,服务器通过会话ID识别不同用户..

kernel.org服务器遭入侵

- Lamo - Solidot
kernel.org网站首页发布公告,声称多台服务器在本月初(8月12日前)遭黑客攻击,他们在8月28日发现了入侵. 入侵者利用一位用户凭证获得了服务器根访问权限,他们正在调查黑客是如何提升权限的;系统启动脚本被加入了一个木马启动文件;ssh相关文件被修改. kernel.org声称,他们相信Linux kernel源代码库未受影响,因为git分布式版本控制系统的特性决定了它可以很容易注意到代码变化.

Ubuntu下赌ARM服务器

- Tim - Solidot
今日无数手机平板使用的低能耗处理器能否撑起未来的服务器市场. Canonical计划推出支持ARM架构的Ubuntu服务器版本. Ubuntu Linux并不是x86服务器市场的重量级选手,Red Hat才是. 但通过与ARM合作打造ARM服务器,Canonical正努力赢得更多市场份额. 计划于2011年10月发布的Ubuntu Server 11.10,将同步推出支持x86、x86-64和ARM架构的版本.

Windows 搭建VPN服务器

- 洋白菜 - iGFW
Windows XP搭建PPTP VPN. 普通用户,在家里也可以搭建自己的VPN. 需要将服务器端的电脑直接放置于外网访问下,若是ADSL拨号的话,可以用此电脑直接拨号,中间不接路由器. 若是接路由器的话,可以启用NAT(网络地址转换)中的DMZ,将该服务器IP地址填入此处,那么外网访问到本路由Wan口时,就会直接转到该服务器上.

浅谈web服务器—Nginx

- - CSDN博客推荐文章
常见的web服务器有apache,Nginx,lighttpd等. 但Nginx作为一款高性能的Http和反向代理服务器,由于其高效率、简配置等优势在业内被广泛使用. 目前Taobao、新浪、赶集网、金山、豆瓣网、网易新闻等众多知名互联网企业的服务器都是采用Nginx. 根据url的不同,将HTTP请求转发到后端的应用服务器集群.

centos linux 服务器安全

- - 操作系统 - ITeye博客
我们必须明白:最小的权限+最少的服务=最大的安全. 所以,无论是配置任何服务器,我们都必须把不用的服务关闭、把系统权限设置到最小话,这样才能保证服务器最大的安全. 下面是CentOS服务器安全设置,供大家参考. 一、注释掉系统不需要的用户和用户组. 注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦.

Java NIO服务器实例

- - ImportNew
我一直想学习如何用Java写一个 非阻塞IO服务器,但无法从网上找到一个满足要求的服务器. 我找到了 这个示例,但仍然没能解决我的问题. 还可以选择 Apache MINA框架. 但我的要求相对简单,MINA对我来说还稍微有点复杂. 所以在MINA和一些教程(参见 这篇和 这篇)的帮助下,我自己写了一个非阻塞IO服务器.

angularjs与服务器交互

- - CSDN博客Web前端推荐文章
真正的应用需要和真实的服务器进行交互,移动应用和新兴的Chrome桌面应用可能是个例外,但是对于此外的所有应用来说,无论你是想把数据持久化到云端,还是需要与其他用户进行实时交互,都需要让应用与服务器进行交互. 为了实现这一点,Angular提供了一个叫做$http的服务. 它提供了一个可扩展的抽象方法列表,使得与服务器的交互更加容易.