分类 技术 下的文章

SQLite是一个零配置、无服务端、基于文件的事务型数据库系统。由于它的轻量级,自包含和紧凑的设计,所以当你想要集成数据库到你的程序中时,SQLite是一个非常不错的选择。在这篇文章中,我会展示如何用Perl脚本来创建和访问SQLite数据库。我演示的Perl代码片段是完整的,所以你可以很简单地修改并集成到你的项目中。

访问SQLite的准备

我会使用SQLite DBI Perl驱动来连接到SQLite3。因此你需要在Linux中安装它(和SQLite3一起)。

Debian、 Ubuntu 或者 Linux Mint

$ sudo apt-get install sqlite3 libdbd-sqlite3-perl

CentOS、 Fedora 或者 RHEL

$ sudo yum install sqlite perl-DBD-SQLite

安装后,你可以检查SQLite驱动可以通过下面的脚本访问到。

#!/usr/bin/perl

my @drv = DBI->available_drivers();
print join("\n", @drv), "\n";

如果你运行脚本,你应该会看见下面的输出。

DBM
ExampleP
File
Gofer
Proxy
SQLite
Sponge

Perl SQLite 访问示例

下面就是Perl访问SQLite的示例。这个Perl脚本会演示下面这些SQLite数据库的常规管理。

  • 创建和连接SQLite数据库
  • 在SQLite数据库中创建新表
  • 在表中插入行
  • 在表中搜索和迭代行
  • 在表中更新行
  • 在表中删除行
use DBI;
use strict;

# 定义数据库名称和驱动
my $driver   = "SQLite";
my $db_name = "xmodulo.db";
my $dbd = "DBI:$driver:dbname=$db_name";

# sqlite 没有用户名密码的概念
my $username = "";
my $password = "";

# 创建并连接到数据库
# 以下创建的文件名为 xmodulo.db
my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 })
                      or die $DBI::errstr;
print STDERR "Database opened successfully\n";

# 创建表
my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK
             (ID INTEGER PRIMARY KEY     AUTOINCREMENT,
              HOSTNAME       TEXT    NOT NULL,
              IPADDRESS      INT     NOT NULL,
              OS             CHAR(50),
              CPULOAD        REAL););
my $ret = $dbh->do($stmt);
if($ret < 0) {
   print STDERR $DBI::errstr;
} else {
   print STDERR "Table created successfully\n";
}

# 插入三行到表中
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
           VALUES ('xmodulo', 16843009, 'Ubuntu 14.10', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
           VALUES ('bert', 16843010, 'CentOS 7', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
           VALUES ('puppy', 16843011, 'Ubuntu 14.10', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;

# 在表中检索行
$stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;);
my $obj = $dbh->prepare($stmt);
$ret = $obj->execute() or die $DBI::errstr;

if($ret < 0) {
   print STDERR $DBI::errstr;
}
while(my @row = $obj->fetchrow_array()) {
      print "ID: ". $row[0] . "\n";
      print "HOSTNAME: ". $row[1] ."\n";
      print "OS: ". $row[2] ."\n";
      print "CPULOAD: ". $row[3] ."\n\n";
}

# 更新表中的某行
$stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='Ubuntu 14.10';);
$ret = $dbh->do($stmt) or die $DBI::errstr;

if( $ret < 0 ) {
   print STDERR $DBI::errstr;
} else {
   print STDERR "A total of $ret rows updated\n";
}

# 从表中删除某行
$stmt = qq(DELETE from NETWORK where ID=2;);
$ret = $dbh->do($stmt) or die $DBI::errstr;

if($ret < 0) {
   print STDERR $DBI::errstr;
} else {
   print STDERR "A total of $ret rows deleted\n";
}

# 断开数据库连接
$dbh->disconnect();
print STDERR "Exit the database\n";

上面的Perl脚本运行成功后会创建一个叫“xmodulo.db”的数据库文件,并会有下面的输出。

Database opened successfully
Table created successfully
ID: 1
HOSTNAME: xmodulo
OS: Ubuntu 14.10
CPULOAD: 0

ID: 2
HOSTNAME: bert
OS: CentOS 7
CPULOAD: 0

ID: 3
HOSTNAME: puppy
OS: Ubuntu 14.10
CPULOAD: 0

A total of 2 rows updated
A total of 1 rows deleted
Exit the database

错误定位

如果你尝试没有安装SQLite DBI驱动的情况下使用Perl访问SQLite的话,你会遇到下面的错误。你必须按开始说的安装DBI驱动。

Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./script.pl line 3.
BEGIN failed--compilation aborted at ./script.pl line 3.

via: http://xmodulo.com/access-sqlite-database-perl.html

作者:Dan Nanni 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Cacti 是一个很棒的开源网络监视系统,它广泛使用于图形化地展示网络元素,例如带宽、存储、处理器和内存使用。使用它的基于Web 的界面,你可以轻松地创建和组织各种图表。然而,它默认并没有提供一些高级功能,例如合并图片、使用多个来源创建聚合图形、迁移 Cacti 到另一台服务器。使用 Cacti 的这些功能你还需要一些经验。在该教程中,我们会看到如何在将两幅 Cacti 图片合并为一幅。

看看这个例子。在过去的 6 个月中,客户端 A 连接到了交换机 A 的端口 5。端口 5 发生了错误,因此客户端迁移到了端口 6。由于 Cacti 为每个接口/元素使用不同的图,客户端的带宽历史会分成端口 5 和端口 6。结果是对于一个客户端我们有两幅图片 - 一幅是 6 个月的旧数据,另一幅保存了后续的数据。

在这种情况下,我们实际上可以合并两幅图片将旧数据加到新的图中,使得用一个单独的图为一个用户保存历史的和新数据。本教程将会解释如何做到这一点。

Cacti 将每幅图片的数据保存在它自己的 RRD(round robin database,循环数据库)文件中。当请求一幅图片时,根据保存在对应 RRD 文件中的值生成图。在 Ubuntu/Debian 系统中,RRD 文件保存在 /var/lib/cacti/rra,在 CentOS/RHEL 系统中则是 /var/www/cacti/rra

合并图片背后的思想是更改这些 RRD 文件使得旧 RRD 文件中的值能追加到新的 RRD 文件中。

情景

一个客户端的服务在 eth0 上运行了超过一年。由于硬件损坏,客户端迁移到了另一台服务器的 eth1 接口。我们想展示新接口的带宽,同时保留超过一年的历史数据。该客户端希望只在一幅图中显示。

确定图的 RRD 文件

图合并的首个步骤是确定与图相关联的 RRD 文件。我们可以通过以调试模式打开图检查文件。要做到这点,在 Cacti 的菜单中: 控制台 > 管理图 > 选择图 > 打开图调试模式。

旧图:

新图:

从样例输出(基于 Debian 系统)中,我们可以确定两幅图片的 RRD 文件:

  • 旧图: /var/lib/cacti/rra/old\_graph\_traffic\_in\_8.rrd
  • 新图: /var/lib/cacti/rra/new\_graph\_traffic\_in\_10.rrd

准备脚本

我们会用一个 RRD 剪接脚本 来合并两个 RRD 文件。下载该 PHP 脚本,并安装到 /var/lib/cacti/rra/rrdsplice.php (Debian/Ubuntu 系统) 或 /var/www/cacti/rra/rrdsplice.php (CentOS/RHEL 系统)。

下一步,确认 Apache 用户拥有该文件。

在 Debian 或 Ubuntu 系统中,运行下面的命令:

# chown www-data:www-data rrdsplice.php

并更新 rrdsplice.php。查找下面的行:

chown($finrrd, "apache");

用下面的语句替换:

chown($finrrd, "www-data");

在 CentOS 或 RHEL 系统中,运行下面的命令即可:

# chown apache:apache rrdsplice.php

合并两幅图

通过不带任何参数运行该脚本可以获得脚本的使用语法。

# cd /path/to/rrdsplice.php
# php rrdsplice.php 

USAGE: rrdsplice.php --oldrrd=file --newrrd=file --finrrd=file

现在我们准备好合并两个 RRD 文件了。只需要指定旧 RRD 文件和新 RRD 文件的名称。我们会将合并后的结果重写到新 RRD 文件中。

# php rrdsplice.php --oldrrd=old_graph_traffic_in_8.rrd --newrrd=new_graph_traffic_in_10.rrd --finrrd=new_graph_traffic_in_10.rrd 

现在旧 RRD 文件中的数据已经追加到了新 RRD 文件中。Cacti 会将任何新数据写到新 RRD 文件中。如果我们点击图,我们可以发现也已经添加了旧图的周、月、年记录。下面图表中的第二幅图显示了旧图的周记录。

总之,该教程显示了如何简单地将两幅 Cacti 图片合并为一幅。当服务迁移到另一个设备/接口,我们希望只处理一幅图片而不是两幅时,这个小技巧非常有用。该脚本非常方便,因为它可以不管源设备是不是相同都可以合并图片,例如 Cisco 1800 路由器和 Cisco 2960 交换机。

希望这些能对你有所帮助。


via: http://xmodulo.com/combine-two-graphs-cacti.html

作者:Sarmed Rahman 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

毋庸置疑,对于系统管理员,提高服务器的安全性是最重要的事情之一。因此,也就有了许多针对这个话题而生的文章、博客和论坛帖子。

一台服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制的解决方案。这篇文章尽可能涵盖一些有所裨益的小技巧来帮助管理员保证服务器和用户安全。

有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及:

  • 务必保证系统是最新的
  • 经常更换密码 - 使用数字、字母和非字母的符号组合
  • 给予用户最小的权限,满足他们日常使用所需即可
  • 只安装那些真正需要的软件包

下面是一些更有意思的内容:

更改SSH默认端口

在搭建好一台全新的服务器后要做的第一件事情就是更改SSH的默认端口。这个小小的改动能够使你的服务器避免受到成千上万的暴力攻击(LCTT 译注:不更改默认端口相当于黑客们知道你家的门牌号,这样他们只需要一把一把的试钥匙就可能打开你家的锁)。

要更改默认的SSH端口,先打开sshd\_config文件:

sudo vim /etc/ssh/sshd_config

找到下面这行:

#Port 22

“#”号表示这行是注释。首先删除#号,然后把端口号改成目的端口。端口号不能超过65535,确保要指定的端口号没有被系统或其它服务占用。建议在[维基百科]上查看常用端口号列表。在本文中,使用这个端口号:

Port 16543

然后保存并关闭文件。

接下来的一步是:

使用SSH密钥认证

在通过SSH访问服务器时,使用SSH密钥进行认证是尤其重要的。这样做为服务器增加了额外的保护,确保只有那些拥有密钥的人才能访问服务器。

在本地机器上运行下面命令以生成SSH密钥:

ssh-keygen -t rsa

你会看到下面的输出,询问要将密钥写到哪一个文件里,并且设置一个密码:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): my_key
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in my_key.
Your public key has been saved in my_key.pub.
The key fingerprint is:
SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A

完成之后,就得到两个文件:

my\_key

my\_key.pub

接下来把my\_key.pub拷贝到~/.ssh/authorized\_key中

cp my_key.pub ~/.ssh/authorized_keys

然后使用下面命令将密钥上传到服务器:

scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/

至此,你就可以从这台本地机器上无密码地访问服务器了。

关闭SSH的密码认证

既然已经有了SSH密钥,那么关闭SSH的密码认证就会更安全了。再次打开并编辑sshd\_config,按如下设置:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

关闭Root登录

下面关键的一步是关闭root用户的直接访问,而使用sudo或su来执行管理员任务。首先需要添加一个有root权限的新用户,所以编辑这个路径下的sudoers文件:

/etc/sudoers/

推荐使用如visudo这样的命令编辑该文件,因为它会在关闭文件之前检查任何可能出现的语法错误。当你在编辑文件时出错了,这就很有用了。

接下来赋予某个用户root权限。在本文中,使用用户sysadmin。确保在编辑后这个文件时使用的用户是系统已有的用户。找到下面这行:

root ALL=(ALL) ALL

拷贝这行,然后粘贴在下一行,然后把root更改为“sysadmin”,如下所示:

root ALL=(ALL) ALL
sysadmin ALL=(ALL) ALL

现在解释一下这行的每一个选项的含义:

(1) root  (2)ALL=(3)(ALL) (4)ALL

(1) 指定用户

(2) 指定用户使用sudo的终端

(3) 指定用户可以担任的用户角色

(4) 这个用户可以使用的命令

(LCTT 译注:所以上面的配置是意思是:root 用户可以在任何终端担任任何用户,执行任何命令。)

使用这个配置可以给用户访问一些系统工具的权限。

这时,可以放心保存文件了。

为了关闭通过SSH直接访问root,需要再次打开sshd\_config,找到下面这行:

#PermitRootLogin yes

更改为:

PermitRootLogin no

然后保存文件,重启sshd守护进程使改动生效。执行下面命令即可:

sudo /etc/init.d/sshd restart

设置防火墙

防火墙有助于过滤出入端口和阻止使用暴力法的登录尝试。我倾向于使用SCF(Config Server Firewall)这个强力防火墙。它使用了iptables,易于管理,而且对于不擅于输入命令的用户提供了web界面。

要安装CSF,先登录到服务器,切换到这个目录下:

cd /usr/local/src/

然后以root权限执行下面命令:

wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

只需等待安装程序完成,然后编辑CSF的配置文件:

/etc/csf/csf.conf

默认情况下CSF是以测试模式运行。通过将“TESTING”的值设置成0,切换到product模式。

TESTING = "0"

下面要设置的就是服务器上允许通过的端口。在csf.conf中定位到下面的部分,根据需要修改端口:

# 允许入站的 TCP 端口
TCP_IN = "20,21,25,53,80,110,143,443,465,587,993,995,16543"
# 允许出站的 TCP 端口
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,16543"
# 允许入站的 UDP 端口
UDP_IN = "20,21,53"
# 允许出站的 UDP 端口
# 要允许发出 traceroute 请求,请加 33434:33523 端口范围到该列表 
UDP_OUT = "20,21,53,113,123"

请根据需要逐一设置,推荐只使用那些需要的端口,避免设置对端口进行大范围设置。此外,也要避免使用不安全服务的不安全端口。比如只允许端口465和587来发送电子邮件,取代默认的SMTP端口25。(LCTT 译注:前提是你的邮件服务器支持 SMTPS)

重要:千万不要忘记允许自定义的 ssh 端口。

允许你的IP地址通过防火墙,而绝不被屏蔽,这一点很重要。IP地址定义在下面的文件中:

/etc/csf/csf.ignore

被屏蔽了的IP地址会出现在这个文件中:

/etc/csf/csf.deny

一旦完成更改,使用这个命令重启csf:

sudo /etc/init.d/csf restart

下面是在某台服务器上的csf.deny文件的部分内容,来说明CSF是很有用的:

211.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs - Fri Mar 6 00:30:35 2015
103.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:06:46 2015
103.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:59:04 2015
103.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 02:48:26 2015
109.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs - Fri Mar 6 03:49:03 2015

可以看到,尝试通过暴力法登录的IP地址都被屏蔽了,真是眼不见心不烦啊!

锁住账户

如果某个账户在很长一段时间内都不会被使用了,那么可以将其锁住以防止其它人访问。使用如下命令:

passwd -l accountName

当然,这个账户依然可以被root用户使用(LCTT 译注:可用 su 切换为该账号)。

了解服务器上的服务

服务器的本质是为各种服务提供访问功能。使服务器只运行所需的服务,关闭没有使用的服务。这样做不仅会释放一些系统资源,而且也会使服务器变得更加安全。比如,如果只是运行一个简单的服务器,显然不需要X显示或者桌面环境。如果不需要Windows网络共享功能,则可以放心关闭Samba。

使用下面的命令能查看伴随系统启动而启动的服务:

chkconfig --list | grep "3:on"

如果系统运行了systemd,执行这条命令:

systemctl list-unit-files --type=service | grep enabled

然后使用下面的命令关闭服务:

chkconfig service off
或
systemctl disable service

在上面的例子中,把“service”替换成真正想要停止的服务名称。实例如下:

chkconfig httpd off
或
systemctl disable httpd

小结

这篇文章的目的是涵盖一些通用的安全步骤以便帮助你保护服务器。你可以采取更多方式去增强对服务器的保护。请记住保证服务器安全是你的责任,在维护服务器安全时尽量做出明智的选择,尽管并没有什么容易的方式去完成这件事情,而建立“完善的”安全需要花费大量的时间和测试直到达到想要的结果。


via: http://www.linuxveda.com/2015/06/03/secure-linux-server/

作者:Marin Todorow 译者:KayGuoWhu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

SNMP(简单网络管理协议)用于收集设备内部发生的数据,如负载、磁盘状态、带宽之类。像Cacti这样的网络监控工具用这些数据来生成图标以达到监控的目的。

在一个典型的Cacti和SNMP部署中,会有一台或多台启用了SNMP的设备,以及一台独立的用来从那些设备收集SNMP回馈的监控服务器。请记住,所有需要监控的设备必须启用SNMP。在本教程中,出于演示目的,我们将在同一台Linux服务器上配置Cacti和SNMP。

在Debian或Ubuntu上配置SNMP

要在基于Debian的系统上安装SNMP代理(snmpd),请运行以下命令:

root@server:~# apt-get install snmpd

然后,如下编辑配置文件。

root@server:~# vim /etc/snmp/snmpd.conf

# 使snmpd 监听再所有接口上
agentAddress  udp:161

# 定义一个只读的 community 'myCommunity' 和源网络
rocommunity myCommunity 172.17.1.0/24

sysLocation    Earth
sysContact     [email protected]

在编辑完配置文件后,重启snmpd。

root@server:~# service snmpd restart

在CentOS或RHEL上配置SNMP

要安装SNMP工具和库,请运行以下命令。

root@server:~# sudo yum install net-snmp

然后,如下编辑SNMP配置文件。

root@server:~# vim /etc/snmp/snmpd.conf

# 定义一个使用 community 'myCommunity' 和源网络 172.17.1.0/24 的用户 'myUser'
com2sec myUser 172.17.1.0/24 myCommunity

# 将 myUser 加到 'myGroup' 组,定义组权限
group    myGroup    v1        myUser
group    myGroup    v2c        myUser
view all included .1
access myGroup    ""    any    noauth     exact    all    all    none

root@server:~# service snmpd restart
root@server:~# chkconfig snmpd on

重启snmpd服务,然后添加到启动服务列表。

测试SNMP

SNMP可以通过运行snmpwalk命令进行测试。如果SNMP已经配置成功,该命令会生成大量输出。

root@server:~# snmpwalk -c myCommunity 172.17.1.44 -v1

iso.3.6.1.2.1.1.1.0 = STRING: "Linux mrtg 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (2097) 0:00:20.97

~~ 输出截断 ~~

iso.3.6.1.2.1.92.1.1.2.0 = Gauge32: 1440
iso.3.6.1.2.1.92.1.2.1.0 = Counter32: 1
iso.3.6.1.2.1.92.1.2.2.0 = Counter32: 0
iso.3.6.1.2.1.92.1.3.1.1.2.7.100.101.102.97.117.108.116.1 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.92.1.3.1.1.3.7.100.101.102.97.117.108.116.1 = Hex-STRING: 07 DD 0B 12 00 39 27 00 2B 06 00 

配置带有SNMP的Cacti

在本教程中,我们将在同一台Linux服务器上设置Cacti和SNMP。所以,到刚刚配置SNMP的Linux服务器上去安装Cacti吧。

安装完后,Cacti网页界面可以通过“http://172.17.1.44/cacti ”来访问,当然,在你的环境中,请将IP地址换成你的服务器的地址。

安装过程中Cacti的路径一般都是正确的,但是如有必要,请再次检查以下。

在首次安装过程中,Cacti默认的用户名和密码是“admin”和“admin”。在首次登录后会强制你修改密码。

添加设备到Cacti并管理

Cacti将根据先前配置的SNMP字符串注册设备。在本教程中,我们将只添加启用了SNMP的本地服务器。

要添加设备,我们必须以管理员登录,然后转到Cacti管理员面板中的控制台。点击 控制台 > 设备。

那里可能已经有一个名为‘localhost’的设备。我们不需要它,因为我们要创建全新的图表。我们可以将该设备从列表中删除,使用“添加”按钮来添加新设备。

接下来,我们设置设备参数。

现在设备已经添加,我们来指定想要创建的图表模板。你可以在该页面的最后部分中找到这块内容。

然后,我们继续来创建图表。

这里,我们创建用于平均负载、RAM和硬盘、处理器的图表。

接口的图表和64位计数器

默认情况下,Cacti在SNMP查询中使用32位计数器。32位计数器对于大多数带宽图表而言已经足够了,但是对于超过100Mbps的带宽,它就无能为力了。如果已经知道带宽会超过100Mbps,建议你使用64位计数器。使用64位计数器一点也不麻烦。

注意: Cacti会花费大约15分钟来产生新图表,除了耐心等待,你别无选择。

创建图表树

这些截图展示了如何创建图表树,以及如何添加图表到这些树中。

我们可以验证图表树中的图表。

用户管理

最后,我们创建一个只具有查看我们刚创建的图表权限的用户。Cacti内建了用户管理系统,而且是高度可定制的。

在完成这些步骤后,我们可以使用‘user1’来登录进去,并验证只有该用户可以查看该图表。

至此,我们在网络监控系统中部署了一台Cacti服务器。Cacti服务器比较稳定,可以处理大量图表而不会出问题。

希望本文对你有所帮助。


via: http://xmodulo.com/monitor-linux-servers-snmp-cacti.html

作者:Sarmed Rahman 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Nagios内置了很多脚本来监控服务。本篇会使用其中一些来检查通用服务如MySql、Apache、DNS等等。

为了保证本篇集中在系统监控,我们不会在这里配置主机组或者模板,它们已经在 前面的教程中覆盖了,它们可以满足需要了。

在命令行中运行Nagios

通常建议在添加到Nagios前,先在命令行中运行Nagios服务检测脚本。它会给出执行是否成功以及脚本的输出将会看上去的样子。

这些脚本存储在 /etc/nagios-plugins/config/ ,可执行文件在 /usr/lib/nagios/plugins/。

下面就是该怎么做

root@nagios:~# cd /etc/nagios-plugins/config/

提供的脚本包含了语法帮助。示例包含了部分输出。

root@nagios:~# cat /etc/nagios-plugins/config/tcp_udp.cfg

# 'check_tcp' command definition
define command{
        command_name    check_tcp
        command_line    /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p '$ARG1$'

了解了语法,TCP 80端口可以用下面的方法检查。

root@nagios:~# /usr/lib/nagios/plugins/check_tcp -H 10.10.10.1 -p 80

TCP OK - 0.000 second response time on port 80|time=0.000222s;;;0.000000;10.000000

示例拓扑

本片中使用下面三台服务器。每台服务器运行多个通用服务。Nagios服务器现在运行的是Ubuntu。

  • Server 1 (10.10.10.1) : MySQL, Apache2
  • Server 2 (10.10.10.2) : Postfix, Apache2
  • Server 3 (10.10.10.3) : DNS

首先,这些服务器被定义在了Nagios中。

root@nagios:~# vim /etc/nagios3/conf.d/example.cfg

define host{
        use                     generic-host            
        host_name               test-server-1
        alias                   test-server-1
        address                 10.10.10.1
        }

define host{
        use                     generic-host            
        host_name               test-server-2
        alias                   test-server-2
        address                 10.10.10.2
        }

define host{
        use                     generic-host            
        host_name               test-server-3
        alias                   test-server-3
        address                 10.10.10.3
        }

监控MySQL服务

MySQL 监控需要

  • 通过检查3306端口来检测MySQL是否运行中。
  • 检测特定的数据库'testDB'是否可用。

MySQL 服务器设置

开始检测MySQL时,需要记住MySQL默认只监听回环接口127.0.0.1。这增加了数据库的安全。手动调节需要告诉MySQL该监听什么其他接口。下面是该怎么做。

这个设置要在所有的MySQL服务器上完成。

root@nagios:~# vim /etc/mysql/my.cnf

下面这行被注释掉以监听所有网络接口。

#bind-address           = 127.0.0.1

同样,MySQL也不会让任意主机来连接它。需要为localhost和“任意”主机创建MySQL用户‘nagios’,接着在所有的数据库中为这个用户授予ALL权限,会这将在会用在监控中。

下面的设置对所有的MySQL服务器都已经设置。

root@nagios:~# mysql -u root –p
## MySQL root 密码 ##

在MySQL服务器中创建'nagios@localhost'用户。

mysql> CREATE USER 'nagios'@'localhost' IDENTIFIED BY 'nagios-pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'localhost';

创建'nagios@任意主机'用户。(LCTT 译注:实际上这两个是同一个用户,只是分别授权给localhost和任意主机的访问;因为它们所用的密码的同一个,修改任何一个,另外一个也相应变化。)

mysql> CREATE USER 'nagios'@'%' IDENTIFIED BY 'nagios-pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'%';

mysql> FLUSH PRIVILEGES;

这使MySQL监听所有的网络接口,同样接受来自用户'nagios'的进入连接。

请注意,这种修改可能有安全隐患,所以需要提示几点:

  • 这个设置将会暴露MySQL给所有的接口,包括外网。确保只有合法的网络访问是非常重要的。应该使用防火墙和TCP wrapper等过滤器。
  • MySQL用户‘nagios’的密码应该非常强。如果只有几台Nagios服务器,那么应该创建'nagios@服务器名'用户而不是任意用户的'nagios@%'。

对MySQL的Nagios配置

按如下配置来做一些调整。

root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg

define service{
use         generic-service
host_name       test-server-1
;hostgroup can be used instead as well

service_description     Check MYSQL via TCP port
check_command           check_tcp!3306
        }

define service{
use             generic-service
host_name           test-server-1
;hostgroup can be used instead as well

service_description Check availability of database 'testDB'
check_command   check_mysql_database!nagios!nagios-pass!testDB
;check_mysql!userName!userPassword!databaseName
        }

这样,Nagios就可以同时监控MySQL服务器及其数据库的可用性。

监控Apache服务器

Nagios同样也可以监控Apache服务。

Apache监控需要

  • 监控apache服务是否可用

这个任务非常简单因为Nagios有一个内置命令。

root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg

define service{
use         generic-service
host_name       test-server-1, test-server-2
service_description Check Apache Web Server
check_command       check_http
        }

现在就非常简单了。

监控DNS服务

Nagios通过向DNS服务器查询一个完全限定域名(FQDN),或者使用dig工具来查询。默认用于查询的FQDN的是www.google.com,但是这个可以按需改变。按照下面的文件修改来完成这个任务。

root@nagios:~# vim /etc/nagios-plugins/config/dns.cfg

## The -H portion can be modified to replace Google ##
define command{
command_name    check_dns
command_line    /usr/lib/nagios/plugins/check_dns -H www.google.com -s '$HOSTADDRESS$'
}

编辑下面的行。

root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg

## Nagios asks server-3 to resolve the IP for google.com ##
define service{
use                             generic-service
host_name                       test-server-3
service_description     Check DNS
check_command           check_dns
        }

## Nagios asks server-3 to dig google.com ##
define service{
use                             generic-service
host_name                       test-server-3
service_description     Check DNS via dig
check_command           check_dig!www.google.com
        }

监控邮件服务器

Nagios可以监控不同的邮件服务组件如SMTP、POP、IMAP和mailq。之前提过,server-2设置了Postfix邮件服务。Nagios将被配置来监控SMTP和邮件队列。

root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg

define service{
use                     generic-service
host_name               test-server-2
service_description     Check SMTP
check_command           check_smtp
        }

define service{
use                     generic-service
host_name               test-server-2
service_description     Check Mail Queue
check_command           check_mailq_postfix!50!100
                    ;warning at 50, critical at 100
        }

下面的截屏显示了目前配置监控服务的概览。

基于端口自定义监控程序

让我们假设如下定制程序同样运行在网络中,监听着一个特定的端口。

  • 测试1号服务器:定制程序(TCP端口 12345)

做一些小的调整,Nagios也可以帮助我们监控这个程序。

root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg

define service{
use                     generic-service
host_name               test-server-1
service_description     Check server 1 custom application
check_command           check_tcp!12345
        }

在结束之前的提示,Nagios可以监控网络很多其他的方面。存储在/etc/nagios-plugins/config/中的脚本为Nagios提供了很棒的能力。

一些Nagios提供的脚本被仅限于本地服务器,比如,服务器负载、进程并发数量、登录用户数量等。这些检查可以提供Nagios服务器内有用的信息。

希望这篇文章对你有用。


via: http://xmodulo.com/monitor-common-services-nagios.html

作者:Sarmed Rahman 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

“多年前由一些紧张兮兮的、带有强迫症的助理开发的 Bulletin,只是一个放在共享文件夹中只有 Emily 和我可以访问的 Word 文档而已。同一时间我们只有一个人可以打开它并添加消息、想法,或者给条目列表上增加问题。然后我们再打印出更新后的版本并放到我桌子架上的剪贴板,并在完成时删除旧的内容。”(——《穿普拉达的女王》,劳伦·魏丝伯格著 )

直到今天人们仍然在使用这样的“协同编辑”,只有一个人可以打开共享文件,对其进行更改,然后告诉其它人什么时候修改了什么。

ONLYOFFICE 是一款集成了文档、电子邮件、事件、任务和客户关系管理工具的开源在线办公套件。

使用 ONLYOFFICE 办公套件,一组人可以同时编辑文本、电子表格或者在浏览器上进行展示。可以直接在他们的文档上留下评论并用其中集成的聊天工具和其他人沟通。最后,可以保存文档为 PDF 文件并打印。作为额外的增强功能,它还能浏览文档历史并在如果需要时恢复到之前的修订/版本。

在这篇教程中,我会介绍如何使用 免费版 ONLYOFFICE 部署你自己的在线办公套件,免费版 ONLYOFFICE 是 ONLYOFFICE 在 GNU AGPL v3 协议下发布的自托管版本。

在 Linux 上安装 ONLYOFFICE

安装 ONLYOFFICE 要求在你的 Linux 系统上要有 mono(4.0.0 或更高版本)、nodejs、libstdc++6、nginx 和 mysql-server。为了简化安装过程并避免依赖错误,我使用 Docker 安装 ONLYOFFICE。在这种情况下只需要安装一种依赖 - Docker

提醒一下,Docker 是一个在软件容器中自动部署应用的开源项目。如果在你的 Linux 系统上 Docker 不可用,首先根据 基于 Debian基于 Red-Hat 系统的 Docker 安装指令安装它。

注意,你需要 Docker 1.4.1 或更高版本。要检查安装的 Docker 版本,可以使用下面的命令。

$ docker version 

在一个 Docker 容器中试用 ONLYOFFICE,只需要执行下面的命令:

$ sudo docker run -i -t -d --name onlyoffice-document-server onlyoffice/documentserver
$ sudo docker run -i -t -d -p 80:80 -p 443:443 --link onlyoffice-document-server:document_server onlyoffice/communityserver

这些命令会下载为了能正常运行带有所有所需依赖的 官方 ONLYOFFICE Docker 镜像

也可以在 Linux 服务器上单独安装 ONLYOFFICE 在线编辑器,并通过提供的 API 轻松地集成到你的站点或云应用。

运行自行托管的在线 Office

要打开你的在线 office,在你浏览器的地址栏输入 localhost(http://IP地址/)。会打开欢迎页面:

输入一个密码并指定下次访问你的 office 所使用的电子邮件地址。

在线编辑文档

首先点击 Document 链接打开 the My Documents 文件夹。

STEP 1. 选择需要编辑的文档

要在这里新建一个新文档,点击左上角的 “Create” 按钮,从下拉列表中选择文件类型。要编辑保存在你硬盘中的文件,点击 Create 按钮旁边的 Upload 按钮上传文件到 Document

STEP 2. 共享文档

如果你在 My Documents 文件夹中,用右边的 Share 按钮,或者如果你在文档中,用 File >> Document Info ... >> Change Access Rights

在打开的 Sharing Settings 窗口,点击左边的 People outside portal 链接,打开到文档的访问,并通过启用 Full Access 单选按钮给予完全访问权限。

最后,选择一种方式共享到你文档的链接,通过 email 或者你可用的一种社交网络:Google+、Facebook 或 Twitter 发送。

STEP 3. 开始协同编辑

邀请的人只需要根据提供的链接就可以开始协同编辑文档。

它会自动用不用颜色的虚线将你的合作者编辑的文本段落标记出来。

只要你的其中一个协作者保存了他/她的更改,你会看到在顶部工具栏左上角出现了一个提示标签,表示这里有更新。

点击 Save 图标保存更改并更新。然后会高亮所有的更新。

STEP 4. 和协作者互动

要写评论,用鼠标选择一个文本段落,右击并从上下文菜单中选择 Add comment 选项。

要和协作者实时互动,可以使用集成的聊天工具。Chat 面板会列出所有正在编辑文档的用户。点击左侧边栏的 Chat 图标打开它。在 Chat 面板的合适区域输入你的信息开始讨论。

有用的提示

最后,这里有一些你充分利用 ONLYOFFICE 的有用提示。

Tip #1. 在云存储服务例如 ownCloud 上编辑文档

如果你将文档存储在其它网络资源上,例如 Box、Dropbox、Google Drive、OneDrive、SharePoint 或 ownCloud,你可以轻松地和 ONLYOFFICE 同步。

在打开的 ‘Documents’ 模块,点击 Add the account 下面的其中一个图标:Google、Box、DropBox、OneDrive、ownCloud 或 ‘Add account’,并输入所需数据。

Tip #2. 在 iPad 上编辑文档

要随时随地对文件进行修改,我使用 iPad 的 ONLYOFFICE Documents 应用。你可以从 iTune 下载并安装它,然后你需要输入你的 ONLYOFFICE 地址、email 和密码来访问你的文档。功能设置几乎一样。

为了评估 ONLYOFFICE 在线编辑器的功能,你可以使用供个人使用的 云版本


via: http://xmodulo.com/edit-documents-collaboratively-linux.html

作者:Tatiana Kochedykova 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出