项目名称:基于kafka和zookeeper的日志收集平台
项目环境:CentOS7.9、zookeeper3.6.3、filebeat7.17.5、python3.6.8、kafka2.12、mariadb-server-5.5.68
项目描述:实现对nginx日志的收集和分析,通过URL接口解析日志中IP所属的省份、运营商、带宽等数据,并将其整理到数据库中。通过设置不同的阈值,达到每分钟监控告警的作用。
项目步骤:
- 规划好整个项目的框架和拓扑结构
- 用两台nginx 服务器做反向代理,使用keepalived双vip互为主备做高可用。用户通过反向代理访问nginx web服务产生日志数据。
- 搭建nginx集群,利用filebeat(作为生产者)向kafka发送收集到的nginx日志数据。
- 搭建zookeeper和kafka集群(作为中间件),用zookeerper集群来管理kafka集群并且保存kafka集群的元信息。kafka将收集到的日志按归属的topic存放到partition的消息队列中。
- 编写Python脚本(作为消费者),从kafka的partition中拿取消息,并进行数据清洗,再将需要的数据(时间、省份、运营商、带宽)保存到数据库,方便为后续的监控作对比。
- 编写一个监控脚本,使用celery定时任务,用redis做为中间件,实现每分钟都监控报警。如果某省某运营商流量超过设定的阈值,就通过邮件发送进行报警。
项目心得:
- 明白了事先规划好项目框架和拓扑图的重要性
- 提高了自己的python编程和理解数据走向的能力
- 加深了对redis和kafka这类中间件的理解
- 做项目一定要仔细认真,不然就会出现失之毫厘差之千里
第一步:规划好整个项目的框架和拓扑结构
nginx-kafka01:192.168.29.137
nginx-kafka02:192.168.29.155
nginx-kafka03:192.168.29.128
lb1:192.168.29.99
lb2:192.168.29.100
第二步:用两台nginx 服务器做反向代理,使用keepalived双vip互为主备做高可用。用户通过反向代理访问nginx web服务产生日志数据。
1、用两台虚拟机执行下面这个脚本
[root@load-balancer ~]# cat onekey_install_shediao_v9.sh
#!/bin/bash
#解决软件的依赖关系,需要安装的软件包
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget
#新建luogan用户和组
id FMY || useradd FMY -s /sbin/nologin
#下载nginx软件
mkdir /FMY99 -p
cd /FMY99
wget http://nginx.org/download/nginx-1.21.1.tar.gz
#解压软件
tar xf nginx-1.21.1.tar.gz
#进入解压后的文件夹
cd nginx-1.21.1
#编译前的配置
./configure --prefix=/usr/local/FMY99 --user=FMY --group=FMY --with-http_ssl_module --with-threads --with-http_v2_module --with-http_stub_status_module --with-stream
#如果上面的编译前的配置失败,直接退出脚本
if (( $? != 0));then
exit
fi
#编译
make -j 2
#编译安装
make install
#修改PATH变量
echo "PATH=$PATH:/usr/local/FMY99/sbin" >>/root/.bashrc
#执行修改了环境变量的脚本
source /root/.bashrc
#firewalld and selinux
#stop firewall和设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld
#临时停止selinux和永久停止selinux
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
#开机启动
chmod +x /etc/rc.d/rc.local
echo "/usr/local/FMY99/sbin/nginx" >>/etc/rc.local
安装完之后,我们需要重启一下。可以退出一下xshell,然后再次连接。那么就会重新加载环境变量
[root@load-balancer ~]# ps aux|grep nginx
root 1552 0.0 0.0 112824 988 pts/1 S+ 22:29 0:00 grep --color=auto nginx
[root@load-balancer ~]# nginx # 启动nginx
[root@load-balancer ~]# ps aux|grep nginx
root 1554 0.0 0.0 46220 1164 ? Ss 22:29 0:00 nginx: master process nginx
FMY 1555 0.0 0.1 46680 1920 ? S 22:29 0:00 nginx: worker process
root 1558 0.0 0.0 112824 988 pts/1 S+ 22:29 0:00 grep --color=auto nginx
[root@load-balancer ~]# ss -anplut|grep nginx # 查看nginx的端口
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1555,fd=6),("nginx",pid=1554,fd=6))
2、修改nginx配置文件
[root@localhost ~]# cd /usr/local/FMY99
[root@localhost FMY99]# cd conf/
[root@localhost conf]# vim nginx.conf
# 配置完之后,使用命令重新加载一下nfs服务
[root@load-balancer ~]# nginx -s reload
3、安装keepalived软件并且配置keepalived文件设置双vip
[root@load-balancer ~]# yum install keepalived -y
# 192.168.29.99
[root@load-balancer ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict # 这个配置要注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 实例1
vrrp_instance VI_1 { # 启动一个vrrp的实例 VI_1实例名字,可以自定义
state BACKUP # 填MASTER或者BACKUP,建议配置为BACKUP,因为MASTER会抢占VIP
interface ens33 # 在哪个接口监听vrrp协议,同时绑定VIP到哪个接口
virtual_router_id 51 # 虚拟路由id 0~255
priority 200 #优先级 0~255
advert_int 1 # advert interval 宣告消息 时间间隔为1秒
authentication { # 认证
auth_type PASS #认证的类型是密码认证
auth_pass 1111 # 具体的密码,可以自己修改
}
virtual_ipaddress { # VIP的配置,vip可以是多个IP
192.168.29.199 # 这个IP地址要没人使用的IP地址
}
}
# 实例2
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.29.200
}
}
# 192.168.29.100
[root@load-balancer-2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.29.199
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.29.200
}
}