如何利用电脑摄像头搭建家庭视频监控系统?

如何利用电脑摄像头搭建家庭视频监控系统?,第1张

步骤1:确定视频传输通道

由于查看视频监控服务器的画面需要通过网络传输,因此视频监控服务器必须能连接互联网。在这之前为了能正常访问视频监控服务器,必须解决一个问题--如何从外部网络访问视频监控服务器。一般来说,监控服务器的联网方法有两种。一种是直接由监控服务器电脑拨号上网,这种联网方式比较简单,只要监控服务器成功运行,然后拨号上网,再运行动态域名解析软件和视频监控软件即可。另一种方法主要针对使用路由器上网的电脑进行端口映射,要想从外网访问,就必须给内网分配一个外网IP地址。因此必须申请动态域名解析服务。[fenye]

步骤2:监控设备的选择

设置完网络参数,接着搭建视频监控服务器。视频监控服务器就是一台配有摄像头且可以上网的电脑。由于需要长时间开机,因此要求电脑稳定性较高、功耗较低。笔者在客厅放置的视频监控服务器选用的是整合凌动CPU的小型主板,并配有静音风扇。软件方面,可以使用Webcamxp充当视频监控软件客户端

步骤3:确定音/视频源

为了让用户能够访问视频摄像头,还需要对客户端软件的视频和音频监控源进行设置,在视频监控软件的“sources monitor”选项卡的“tools/options”中有两个类别,分别是音频源(audio source)和视频源(video source),可在此设定对应的摄像头设备和麦克风设备。

步骤4:建立外部监控通道

由于用户要通过网络查看视频监控服务器上的监控视频,因此接下来要把客户端软件获取的视频和音频对外发布。可通过客户端软件的“web/broadcast”选项卡中的“内部http服务器”选项进行设置。

如果直连互联网,可以使用“搜索WAN IP”选项,勾选“启动时检测WAN IP”选项,这样客户端软件会自动获取视频监控服务器的公网IP。如果使用宽带路由器进行联网,则在软件的“内部IP地址”中输入手动分配给该视频监控服务器的内网IP地址,并关闭“启动时检测WAN IP”选项。完成这些设置后,点击WEB Server按钮即可启动对外广播功能。

经过以上设置后,只要在任何一台已经连接网络的电脑上输入自己申请的域名,即可看到家中情况。

更多参考艾维音响网

Monit是什么?

Monit是

一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只

有500KB大小),并且不依赖任何第三方程序、插件或者库。然而,Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务

的自定义动作等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。

已经在一些机器使用Monit几年了,而且我对它的可靠性非常满意。甚至作为全面的监控系统,对任何Linux系统管理员来说Monit也是非常有用和强

大的。在这篇教程中,我会展示如何在一个本地服务器部署Monit(作为后备监控系统)来监控常见的服务。在部署过程中,我只会展示我们用到的部分。

在Linux安装Monit

Monit已经被包含在多数Linux发行版的软件仓库中了。

Debian、Ubuntu或者Linux Mint:

$ sudo aptitude install monit

Fedora或者CentOS/RHEL:

在CentOS/RHEL中,你必须首先启用EPEL或者Repoforge软件仓库.

# yum install monit

Monit

自带一个文档完善的配置文件,其中包含了很多例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL

中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint

中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。

Global Configuration: Web Status Page (全局配置:Web状态页面)

Monit可以使用邮件服务来发送通知,也可以使用HTTP/HTTPS页面来展示。我们先使用如下配置的web状态页面吧:

Monit监听1966端口。

对web状态页面的访问是通过SSL加密的。

使用monituser/romania作为用户名/口令登录。

只允许通过localhost、myhost.mydomain.ro和在局域网内部(192.168.0.0/16)访问。

Monit使用pem格式的SSL证书。

之后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是类似的。

首先,在/var/cert生成一个自签名的证书(monit.pem):

# mkdir /var/certs # cd /etc/pki/tls/certs # ./make-dummy-cert monit.pem # cp monit.pem /var/certs # chmod 0400 /var/certs/monit.pem

现在将下列代码片段放到Monit的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。

set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monit.pem allow monituser:romania allow localhost allow 192.168.0.0/16 allow myhost.mydomain.ro

Global Configuration: Email Notification (全局配置:邮件通知)

然后,我们来设置Monit的邮件通知。我们至少需要一个可用的SMTP服务器来让Monit发送邮件。这样就可以(按照你的实际情况修改):

邮件服务器的机器名:smtp.monit.ro

Monit使用的发件人:monit@monit.ro

邮件的收件人:guletz@monit.ro

邮件服务器使用的SMTP端口:587(默认是25)

有了以上信息,邮件通知就可以这样配置:

set mailserver smtp.monit.ro port 587 set mail-format { from: monit@monit.ro subject: $SERVICE $EVENT at $DATE on $HOST message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION. Yours sincerely, Monit } set alert guletz@monit.ro

就像你看到的,Monit会提供几个内部变量($DATE、$EVENT、$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从Monit所在机器发送邮件,就需要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。

Global Configuration: Monit Daemon (全局配置:Monit守护进程)

接下来就该配置Monit守护进程了。可以将其设置成这样:

在120秒后进行第一次检测。

每3分钟检测一次服务。

使用syslog来记录日志。

如下代码段可以满足上述需求。

set daemon 120 with start delay 240 set logfile syslog facility log_daemon

我们必须定义“idfile”,Monit守护进程的一个独一无二的ID文件;以及“eventqueue”,当monit的邮件因为SMTP或者网络故障发不出去,邮件会暂存在这里;以及确保/var/monit路径是存在的。然后使用下边的配置就可以了。

set idfile /var/monit/id set eventqueue basedir /var/monit

测试全局配置

现在“Global”部分就完成了。Monit配置文件看起来像这样:

# Global Section # status webpage and acl's set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monit.pem allow monituser:romania allow localhost allow 192.168.0.0/16 allow myhost.mydomain.ro # mail-server set mailserver smtp.monit.ro port 587 # email-format set mail-format { from: monit@monit.ro subject: $SERVICE $EVENT at $DATE on $HOST message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION. Yours sincerely, Monit } set alert guletz@monit.ro # delay checks set daemon 120 with start delay 240 set logfile syslog facility log_daemon # idfile and mail queue path set idfile /var/monit/id set eventqueue basedir /var/monit

现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf):

# monit -t Control file syntax OK

如果monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是可以帮助你发现问题的,比如:

monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory /etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro'

一旦你确认配置文件没问题了,可以启动monit守护进程,然后等2到3分钟:

# service monit start

如果你使用的是systemd,运行:

# systemctl start monit

现在打开一个浏览器窗口,然后访问https://<monit_host>:1966。将<monit_host>替换成Monit所在机器的机器名或者IP地址。

如果你使用的是自签名的SSL证书,你会在浏览器中看到一个警告信息。继续访问即可。

你完成登录后,就会看到这个页面。

在这个教程的其余部分,我们演示监控一个本地服务器和常见服务的方法。你会在官方wiki页面看到很多有用的例子。其中的多数是可以直接复制粘贴的!

Service Configuration: CPU/Memory Monitoring (服务配置:CPU、内存监控)

我们先来监控本地服务器的CPU、内存占用。复制如下代码段到配置文件中。

check system localhost if loadavg (1min) >10 then alert if loadavg (5min) >6 then alert if memory usage >75% then alert if cpu usage (user) >70% then alert if cpu usage (system) >60% then alert if cpu usage (wait) >75% then alert

你可以很容易理解上边的配置。最上边的check是指每个监控周期(全局配置里设置的120秒)都对本机进行下面的操作。如果满足了任何条件,monit守护进程就会使用邮件发送一条报警。

如果某个监控项不需要每个周期都检查,可以使用如下格式,它会每240秒检查一次平均负载。

if loadavg (1min) >10 for 2 cycles then alert

Service Configuration: SSH Service Monitoring (服务配置:SSH服务监控)

先检查我们的sshd是否安装在/usr/sbin/sshd:

check file sshd_bin with path /usr/sbin/sshd

我们还想检查sshd的启动脚本是否存在:

check file sshd_init with path /etc/init.d/sshd

最后,我们还想检查sshd守护进程是否存活,并且在监听22端口:

check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/sshd start" stop program "/etc/init.d/sshd stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout

们可以这样解释上述配置:我们检查是否存在名为sshd的进程,并且有一个保存其pid的文件存在(/var/run/sshd.pid)。如果任何一个

不存在,我们就使用启动脚本重启sshd。我们检查是否有进程在监听22端口,并且使用的是SSH协议。如果没有,我们还是重启sshd。如果在最近的5

个监控周期(5x120秒)至少重启5次了,sshd就被认为是不能用的,我们就不再检查了。

Service Configuration: SMTP Service Monitoring (服务配置:SMTP服务监控)

现在我们来设置一个检查远程SMTP服务器(如192.168.111.102)的监控。假定SMTP服务器运行着SMTP、IMAP、SSH服务。

check host MAIL with address 192.168.111.102 if failed icmp type echo within 10 cycles then alert if failed port 25 protocol smtp then alert else if recovered then exec "/scripts/mail-script" if failed port 22 protocol ssh then alert if failed port 143 protocol imap then alert

们检查远程主机是否响应ICMP协议。如果我们在10个周期内没有收到ICMP回应,就发送一条报警。如果监测到25端口上的SMTP协议是异常的,就发

送一条报警。如果在一次监测失败后又监测成功了,就运行一个脚本(/scripts/mail-script)。如果检查22端口上的SSH或者143端

口上的IMAP协议不正常,同样发送报警。

安装RSYSLOG服务器

这第一个部分描述的是如何搭建从客户端收集syslog数据的RSYSLOG服务器。在该例子中,我们的服务器名为rsyslog.domain.com,其固定IP地址为192.168.0.15。

首先,我们安装一些依赖项。

apt-get update

apt-get upgrade

apt-get install rsyslog rsyslog-mysql unzip zip binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ mysql-server mysql-client libmysqlclient15-dev apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libdb4.6-dev libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

安装过程中要求你输入MySQL服务器的密码时,创建一个密码!

我的OpenVZ模板已准备好了一切,所以下面这个命令对你来说可能没有必要……

apt-get install linux-kernel-headers

确保相应服务已创建并运行起来……

/etc/init.d/rsyslog restart

/etc/init.d/mysql restart

/etc/init.d/apache2 restart

确保服务器在侦听合适的TCP IP端口(端口80和端口3306)。这时,RSYSLOG还没有侦听任何端口。

rsyslog:~# netstat -tapn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      415/mysqld

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      581/apache2

然后,我们可以构建rsyslog数据库:

mysqladmin -u root -p create rsyslog

接下来,我们启动MySQL命令外壳程序,创建rsyslog用户:

mysql -u root -p

GRANT SELECT, INSERT, UPDATE, DELETE ON rsyslog.* TO 'rsyslog'@'localhost' IDENTIFIED BY 'ENTER-YOUR-NEW-RSYSLOG-PASSWORD-HERE'

FLUSH PRIVILEGES

quit

接下来,我们配置rsyslog服务器,以便侦听TCP端口514:

vi /etc/rsyslog.conf

添加这几行……(要记得将密码更改成你在创建MySQL服务器的rsyslog用户时输入的那个密码。)

$ModLoad MySQL

*.*       >127.0.0.1,rsyslog,rsyslog,ENTER-YOUR-NEW-RSYSLOG-PASSWORD-HERE

……并去掉处理TCP syslog接收的几行代码前面的注释。

# rsyslog v3的/etc/rsyslog.conf配置文件

#

# 想了解更多信息,请参阅/usr/share/doc/rsyslog-doc/html/rsyslog_conf.html

$ModLoad MySQL

*.* >127.0.0.1,rsyslog,rsyslog,ENTER-YOUR-NEW-RSYSLOG-PASSWORD-HERE

#################

#### 模块 ####

#################

$ModLoad imuxsock # 提供对本地系统日志的支持

$ModLoad imklog # 提供内核日志支持(以前由rklogd来提供)

#$ModLoad immark # 提供--MARK--息功能

# 提供UDP syslog接收

#$ModLoad imudp

#$UDPServerRun 514

# 提供TCP syslog接收

$ModLoad imtcp

$InputTCPServerRun 514

###########################

#### 全局指令 ####

###########################

并重启rsyslog服务。

/etc/init.d/rsyslog restart

确保服务器在侦听合适的TCP IP端口。(端口80、端口514和端口3306。)

rsyslog:~# netstat -tapn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      618/rsyslogd

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      415/mysqld

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      581/apache2

接着我们下载LogAnalyzer,并配置Apache web服务器,以便显示日志。

cd /tmp

wget http://download.adiscon.com/loganalyzer/loganalyzer-3.4.1.tar.gz

tar xvzf loganalyzer-3.4.1.tar.gz

mv loganalyzer-3.4.1/ /var/www/

cd /var/www

接着我们为Apache web服务器配置www文件夹用户权限。

chown www-data:www-data * . -Rf

然后,我们对LogAnalyzer文件夹作了一些“改进”工作。

mv loganalyzer-3.4.1/ loganalyzer

cd contrib/

cp * ./../src/

cd ./../src/

sh ./configure.sh

我们已准备使用我们的互联网服务器来输入LogAnalyzer的最后设置项。往你的互联网浏览器里面输入rsyslog服务器的固定IP地址,本文中是http://192.168.0.15/loganalyzer/src/install.php。

运行简单的设置脚本(很简单,只要点击next ->next。)

现在,你应该有了正常运行的rsyslog服务器,而且LogAnalyzer已创建并运行起来。

接下来,我们配置RSYSLOG客户端,以便将其syslog数据发送到rsyslog服务器:

配置RSYSLOG客户端

我们要做的通常仅仅是配置rsyslog.conf文件,然后重启服务。(几乎所有Debian操作系统都预先安装了rsyslog。)

vi /etc/rsyslog.conf

添加万一网络连接中断要用到的work spool目录这几行,并将你的rsyslog服务器IP地址更改成192.168.0.15。(你可能还想要用mkdir命令来创建/rsyslog/work spool目录。)

# 提供TCP syslog接收

#$ModLoad imtcp

#$InputTCPServerRun 514

$WorkDirectory /rsyslog/work # work(spool)文件的默认位置

$ActionQueueType LinkedList # 使用异步处理

$ActionQueueFileName srvrfwd # 设置文件名称,还启用磁盘模式

$ActionResumeRetryCount -1 # 插入失败后,无限次重试

$ActionQueueSaveOnShutdown on # 如果rsyslog关闭,保存内存中数据

*.* @@YOUR-RSYSLOG-SERVER-ADDRESS-HERE

###########################

#### 全局指令####

###########################

并重启rsyslog服务。

/etc/init.d/rsyslog restart

服务器已通过合适的TCP IP端口(端口514)连接。

root@ic1:~# netstat -tapn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 192.168.0.100:49188     192.168.0.15:514         ESTABLISHED 13289/rsyslogd

这就是成功搭建的系统的样子。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/690459.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-01
下一篇2023-08-01

发表评论

登录后才能评论

评论列表(0条)

    保存