日志收集分析平台 ——环境部署篇

目录

1、准备好3台虚拟机搭建nginx和kafka集群

2、配置好静态ip地址

3、修改主机名

4、每一台机器上都写好域名解析

5、安装基本软件

6、安装时间同步服务

7、关闭防火墙

 8、nginx搭建

8.1 安装好epel源

8.2 编辑配置文件

(1)配置文件修改 

 (2)虚拟主机的配置

8. 3 语法检测

8.4 查看nginx的状态

9、kafka配置

9.1 安装

9.2 配置kafka

 9.3 配置zookeeper (每台机器都需要)

9.4 启动zookeeper

9.5 查看zookeeper是否启动

9.6 启动kafka

9.7 测试

9.8 kafka的日志可以按照两个维度来设置清除

10、filebeat部署

10.1 安装

10.1.1

10.1.2 编辑/etc/yum.repos.d/fb.repo文件

10.1.3 yum安装

10.1.4 设置开机自启

10.2 配置

11、数据入库

11.1 需求分析

11.2 步骤


1、准备好3台虚拟机搭建nginx和kafka集群

2、配置好静态ip地址

服务:NetworkManager 或者 network 只运行一个

systemctl管理的服务器,配置文件在/usr/lib/systemd/system下,以service结尾的配置文件

配置好DNS 用于域名解析

/etc/resolv.conf 要先写入这个文件才可以进行解析,配置本地域名服务器

[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114

DNS解析:

  1. 浏览器的缓存
  2. 本地hosts文件 -- Linux(/etc/hosts)
  3. 找本地域名服务器 -- Linux(/etc/resolv.conf)

3、修改主机名

vim  /etc/hosthname
hostname -F /etc/hostname
或者
hostnamectl set-hostname nginx-kafka03

4、每一台机器上都写好域名解析

一个ip地址可以写多个域名

vim  /etc/hosts
192.168.0.94  nginx-kafka01
192.168.0.95  nginx-kafka02
192.168.0.96  nginx-kafka03

5、安装基本软件

yum install wget lsof vim -y

6、安装时间同步服务

yum -y install chrony

systemctl enable chronyd 设置开机自启,disable关闭开机自启

systemctl start chronyd

设置时区: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

(此步骤在配置虚拟机已经设置的话可以跳过)

7、关闭防火墙

[root@nginx-kafka01 ~]# systemctl stop firewalld
[root@nginx-kafka01 ~]# systemctl disable firewalld

关闭selinux:
	vim /etc/selinux/config
	SELINUX=disabled

    selinux关闭 需要重启机器
[root@nginx-kafka01 ~]# getenforce
Disabled

selinux是Linux系统内核里一个跟安全相关的子系统,规则非常繁琐,一般日常工作里都是关闭的

 8、nginx搭建

搜狗只是展示了一个文本,网页是浏览器展示的

这个nginx web服务是为了测试只是提供一个静态页面

8.1 安装好epel源

yum install epel-release -y

yum install nginx -y

启动:systemctl start nginx

设置开机自启: systemctl enable nginx

8.2 编辑配置文件

[root@nginx-kafka01 ~]# cd /etc/nginx/
[root@nginx-kafka01 nginx]# ls
conf.d        fastcgi.conf.default    koi-utf     mime.types.default  scgi_params          uwsgi_params.default
default.d     fastcgi_params          koi-win     nginx.conf          scgi_params.default  win-utf
fastcgi.conf  fastcgi_params.default  mime.types  nginx.conf.default  uwsgi_params

主配置文件:nginx.conf

... #全局块

events { #events块

事件块 可以有多少个连接

...

}

http #http块

{

... #http全局块 默认块 对所有的网站都生效

include /etc/nginx/conf.d/*.conf; 要添加一个网站的话去这个目录里更改就好,以.conf结尾就会自动加载

server #server块 可以有多个,一个网站一个server

{

... #server全局块

location [PATTERN] #location块

{

...

}

location [PATTERN]

{

...

}

}

server

{

...

}

... #http全局块

}

  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server
  • location块:配置请求的路由,以及各种页面的处理情况

(1)配置文件修改 

vim nginx.conf

listen 80 default_server;

修改成:

listen 80;

 (2)虚拟主机的配置

vim /etc/nginx/conf.d/sc.conf

server {

listen 80 default_server;

server_name www.sc.com;

root         /usr/share/nginx/html;

access_log /var/log/nginx/sc/access.log main;

location / {

        }

}

8. 3 语法检测

[root@nginx-kafka01 /]# cd /usr/share/nginx/html  这个地址就是server里配的root地址
[root@nginx-kafka01 html]# mkdir /var/log/nginx/sc
[root@nginx-kafka01 html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

开启nginx服务 systemctl start nginx

检查nginx是否启动 ps -ef|grep nginx

# 重新加载nginx nginx -s reload

8.4 查看nginx的状态

systemctl status nginx

nginx做web网站的话,只能支持静态网页展示 -- html

9、kafka配置

9.1 安装

放在/opt目录下!!!

(1)安装java:yum install java wget -y

(2)安装kafka:

wget https://mirrors.bfsu.edu.cn/apache/kafka/2.8.1/kafka_2.12-2.8.1.tgz

(3)解压:

tar xf kafka_2.12-2.8.1.tgz

使用自带的zookeeper集群配置

(4)安装zookeeper:

wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

(5)解压

👀注:新的版本的kafka是可以自己管理配置的,我们要的2.12版本还是要靠zookeeper管理,所以要安装zookeeper

看日志 -- logs

看二进制文件 -- bin

看配置 -- conf

9.2 配置kafka

vim /config /server.properties

broker.id=0

listeners=PLAINTEXT://nginx-kafka01:9092

zookeeper.connect=192.168.136.141:2181,192.168.136.132:2181,192.168.136.147:2181

放三个是为了防止有一个连不上的时候可以连下一个

也可以是

zookeeper.connect=192.168.0.94/kafka1,192.168.0.95/kafka1,192.168.0.96/kafka1

表示把东西都放到了kafka1

要是再有一个集群,就可以放到kafka2

 9.3 配置zookeeper (每台机器都需要)

cd /opt/apache-zookeeper-3.6.3-bin/confs

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

添加如下三行:

server.1=192.168.136.141:3888:4888

server.2=192.168.136.132:3888:4888

server.3=192.168.136.147:3888:4888

3888和4888都是端口 一个用于数据传输,一个用于检验存活性和选举

在每台机器上

mkdir /tmp/zookeeper

echo 1 > /tmp/zookeeper/myid

这个1 2 3是本机指定的zookeeper id内容

192.168.136.141 1

192.168.136.132 2

192.168.136.147 3

9.4 启动zookeeper

/opt/ape

bin/zkServer.sh start

开启zk和kafka的时候,一定是先启动zk,再启动kafka

关闭服务的时候,kafka先关闭,再关闭zk

9.5 查看zookeeper是否启动

[root@nginx-kafka03 apache-zookeeper-3.6.3-bin]# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

如有leader follower 表明已经启动

zookeeper使用方法

/opt/ape/bin

./zkCli.sh 进入zookeeper

zookeeper只有绝对路径没有相对路径

9.6 启动kafka

/opt/kafka

bin/kafka-server-start.sh -daemon config/server.properties

9.7 测试

创建topic

bin/kafka-topics.sh --create --zookeeper 192.168.136.141:2181 --replication-factor 3 --partitions 3 --topic sc

这个主题信息会保存在zookeeper上,不放在kafka上了

查看topic

bin/kafka-topics.sh --list --zookeeper 192.168.136.141:2181

创建生产者

[root@localhost kafka_2.12-2.8.0]# bin/kafka-console-producer.sh --broker-list 192.168.0.94:9092 --topic sc

创建消费者

[root@localhost kafka_2.12-2.8.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.136.141:9092 --topic sc --from-beginning

如果出现了生产的数据,就表示成功了

from beginning 表示每次都从头开始

9.8 kafka的日志可以按照两个维度来设置清除

1、按时间 7天

2、按大小

这两个维度可以到kafka的配置文件下更改

任意一个按时间或者按大小的条件满足,都可以触发日志清理

kafka日志保存时按段保存的,segment

保存在不同的段里就是方便清理,如果全都在一个段里,就不好清理

假设有如下segment

00.log 11.log 22.log

  • 00.log保存的是第一条到11条的日志
  • 11.log保存的是第12条到第22条的日志
  • 22.log保存的是第22条之后的日志

10、filebeat部署

filebeat:轻量级日志采集器 /var/log/*.log

10.1 安装

10.1.1

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

10.1.2 编辑/etc/yum.repos.d/fb.repo文件

[elastic-7.x]

name=Elastic repository for 7.x packages

baseurl=https://artifacts.elastic.co/packages/7.x/yum

gpgcheck=1

gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch

enabled=1

autorefresh=1

​type=rpm-md

10.1.3 yum安装

yum install filebeat -y

rpm -qa |grep filebeat 查看filebeat有没有安装

rpm -qa 是查看机器上安装的所有软件包

rpm -ql filebeat 查看filebeat安装到哪里去了,牵扯的文件有哪些

10.1.4 设置开机自启

systemctl enable filebeatf

非开机自启就是 disable

10.2 配置

修改配置文件/etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/nginx/sc/access.log 
#==========------------------------------kafka-----------------------------------
output.kafka:
  hosts:["192.168.136.141:9092","192.168.136.132:9092","192.168.136.147:9092"]
  topic: nginxlog
  keep_alive: 10s

格式一定要正确!!!注意缩进以及paths路径!!!

filebeat只要吐一次就行

output只能有一个

路径一定要正确 ,不然可能收不到日志

谁是leader 谁是follower都是保存在zookeeper里

创建主题nginxlog

bin/kafka-topics.sh --create --zookeeper 192.168.136.141:2181 --replication-factor 3 --partitions 1 --topic nginxlog

启动服务

systemctl start filebeat

查看是否启动

ps -ef |grep filebeat

创建消费者

bin/kafka-console-consumer.sh --bootstrap-server 192.168.136.141:9092 --topic nginxlog --from-beginning

如果能获取到日志数据,就说明连接成功了

filebeat数据文件

[root@nginx-kafka01 filebeat]# pwd
/var/lib/filebeat/registry/filebeat
[root@nginx-kafka01 filebeat]# less log.json

log.json有记录,表明数据已经发送出去了

11、数据入库

11.1 需求分析

需要nginx日志的ip,时间,带宽字段

将ip字段解析成相应的省份、运营商

存入数据库的字段: id, 时间, 省份, 运营商, 带宽

11.2 步骤

1、创建数据库

2、编写python脚本,从kafka获取nginx日志

3、获取好的nginx日志,提取出ip、时间、带宽字段

4、提取出的ip字段通过淘宝一个接口解析出省份和运营商

url = "https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=114.114.114.114"

5、格式化时间字段 "2021-10-12 12:00:00"

6、存入数据库

import json
import requests
import time
import pymysql

taobao_url = "https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip="
#查询ip地址的信息(省份和运营商isp),通过taobao网的接口
def resolv_ip(ip):
    response = requests.get(taobao_url+ip)
    if response.status_code == 200:
       tmp_dict = json.loads(response.text)
       prov = tmp_dict["data"]["region"]
       isp = tmp_dict["data"]["isp"]
       return prov,isp
    return None,None

#将日志里读取的格式转换为我们指定的格式
def trans_time(init_time):
     #把字符串转成时间格式
    timeArray = time.strptime(init_time, "%d/%b/%Y:%H:%M:%S")
    #timeStamp = int(time.mktime(timeArray))
    #把时间格式转成字符串
    new_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)    
    return new_time

#从kafka里获取数据,清洗为我们需要的ip,时间,带宽
from pykafka import KafkaClient
client = KafkaClient(hosts="192.168.136.141:9092,192.168.136.132:9092,192.168.136.147:9092")
topic = client.topics['nginxlog'] 
balanced_consumer = topic.get_balanced_consumer(
  consumer_group='testgroup',
  # 自动提交offset,一般来说是五秒钟提交一次,不是实时更新的
  auto_commit_enable=True,    
  zookeeper_connect='nginx-kafka01:2181,nginx-kafka02:2181,nginx-kafka03:2181'
) 
#consumer = topic.get_simple_consumer() 
# 创建数据库连接
db = pymysql.connect(
host="192.168.136.148",
user="sc",
passwd="123456",
database="nginxlog"
)

# 创建要给游标对象,保留中间结果
cursor=db.cursor()

for message in balanced_consumer:
if message is not None: 
try: #如果数据出现错误,就跳过这条日志
# 如果能消费到数据,都是放在message.value里
line = json.loads(message.value.decode("utf-8"))
log = line["message"]
tmp_lst = log.split()
ip = tmp_lst[0]
init_time = tmp_lst[3].replace("[","")
bt = tmp_lst[9]
dt = trans_time(init_time)
prov, isp = resolv_ip(ip)
if prov and isp:
print(dt,prov,isp,bt)
try:
cursor.execute('insert into kafka_nginxlog(time,province,operater,BW) values("%s", "%s", "%s", "%s")' %(dt,prov,isp,bt))
db.commit()
print("数据写入成功")
except Exception as err:
print("数据写入失败",err)
db.rollback()
except:
pass
db.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值