跟踪OpenLDAP服务器性能

原文: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团队成员的卓越贡献!

跟踪OpenLDAP服务器性能

时间: 2024-10-12 22:41:28

跟踪OpenLDAP服务器性能的相关文章

服务器性能优化

1.度量性能 持续地对性能进行度量在两个方面有帮助.首先,度量可以帮助了解性能趋势,包括好坏两方面的趋势.作为一个简单的方法,查看一下 Web 服务器上的中央处理单元(CPU)使用率,就可以了解 CPU 是否负载过重.同样,查看过去使用的总带宽并推断未来的变化,可以帮助判断什么时候需要进行网络升级.这些度量最好与其他度量和观测结合考虑.例如,当用户抱怨应用程序太慢时,可以检查磁盘操作是否达到了最大容量. 性能度量的第二个用途是,判断调优是对系统性能有帮助,还是使它更糟糕了.方法是比较修改之前和之

Centos Openldap服务器数据库主备(二)

二. Openldap服务器明文主备配置2.1 服务器架设Configure OpenLDAP Replication to continue Directory service if OpenLDAP master server would be down. OpenLDAP master server is called "Provider" and OpenLDAP Slave server is called "Consumer" on OpenLDAP.C

提高服务器性能和并发能力

从哲学上说,消除瓶颈是提高服务器性能和并发能力的唯一途径.如果你能够消除所有的瓶颈,你就能够最大的发挥硬件性能,让系统的性能和并发数到达最佳.采用多线程多核编程,使用事件驱动或异步消息机制,尽量减少阻塞和等待操作(如I/O阻塞.同步等待或计时/超时等).原理:1.多线程多核编程,消除cpu瓶颈.2.采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈.3.采用事件驱动或异步消息机制,可以消除不必要的等待操作.4.如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈.5.在

fedora 20 与 centos 6.5 搭建openldap服务器心得

目标:使用ldap做为系统用户的数据目录,基于web管理ldap数据. 安装 使用 YUM 安装方式 ,由于要使用web方式管理LDAP服务器,也要安装APACHE.PHP和ldap相关的软件包,要想通过ldap验证用户,一定要安装nss-pam-ldapd和pam_ldap.web管理使用ldap-account-manager或phpldapadmin,lam和phpldapadmin可以直接用rpm包安装.centos 6.5 使用openldap 2.4.23, fedora 使用ope

用十条命令在一分钟内检查 Linux 服务器性能

原文地址: http://www.oschina.net/news/69132/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1

集群类型以及提高服务器性能的技术概述

一.集群类型: 1.负载均衡集群(LB集群--Load Balancing): 考虑提高服务器容量,是实现伸缩性扩展的主要技术. 当并发请求出现下面的情形时,就要考虑扩展: 1200请求:1s 1500请求:2s 1800请求:10s 扩展类型: Scale up:向上,需要更强大性能的服务器,缺点是:提高的上限是有限的,并且它的性价比较差. Scale out:向外,需要n多台主机. A.LB的软件解决方案: LVS(Linux Virtual Server). Haproxy. Nginx等

接口测试及服务器性能压测

目前移动端app大都还是采用的http或者https协议写的restful接口,一般的辅助类http劫持(fiddler,charles)和模拟发送(postman)工具都可以满足单次单个接口的测试需求,但这种依附工具的测试很难满足多接口调用逻辑验证问题,也不太灵活,没办法做到数据化,还有就是对于接口压测和服务器性能压力测试无法满足,又得借助于其他压测工具(Jmeter loadrunner等),设计一套基于http和https灵活定制的接口测试框架还是很有必要的. 一般app接口调用都要都要传

Linux服务器性能压力测试

对于新采购的服务器,需要进行有必要的性能测试.这里选择UnixBench工具进行性能测试.记录如下: 1)安装使用下面的脚本使用了最新版UnixBench5.1.3来测试,注释了关于graphic的测试项(大多数VPS都是没有显卡或者是集显,所以图像性能无需测试),运行10-30分钟后(根据CPU内核数量,运算时间不等)得出分数,越高越好.(提前将UnixBench5.1.3.tgz下载到了服务器的/root目录下了) [[email protected] ~]# cat bench.sh #!

网站应用服务器性能优化方案总结

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption