Graylog收集nginx日志做地图事态感知

这个东西有什么用呢

我们通过搜集日志的信息。将日志在通过Graylog进行分析,例如将日志中的IP地址进行字段提取 ,可以分析用户的访问地,做一个统计,可以灵敏感知用户群体分布地,如下图:

在这里插入图片描述

搜集日志的过程如下图

在这里插入图片描述

	     Graylog Sidecar是一种针对不同日志收集器的轻量级配置管理系统,Graylog 节点充当包含日志收集器配置的集中式枢纽。
	在支持的消息生成设备/主机上,Sidecar 可以作为服务(Windows 主机)或守护程序(Linux 主机)运行。
	     日志收集器配置通过 Graylog Web 界面集中管理。Sidecar 守护进程将定期使用REST API获取目标的所有相关配置。
	在第一次运行时,或者当检测到配置更改时,Sidecar 将生成(呈现)相关的后端配置文件。然后它将启动或重新启动
	那些重新配置的日志收集器

开始部署

之前Graylog已经部署过,这里就不在部署Graylog的服务端,可以参考之前的之前的博客

https://editor.csdn.net/md/?articleId=120563987

在这里插入图片描述

在客户端安装 Sidecar

安装:
采用RPM包来安装,这个要在需要收集日志的机子上安装

下载地址  https://github.com/Graylog2/collector-sidecar/releases

在这里插入图片描述
直接rpm 安装即可

rpm -ivh graylog-sidecar-1.1.0-1.x86_64.rpm

配置:

vim /etc/graylog/sidecar/sidecar.yml

server_url: "http://192.168.1.1:9000/api/"  #graylogserver的api地址
server_api_token: ""   #这是验证密钥,我们需要在graaylog的server端生成后,再回来填上,这里先空着,
                       #作用sidecar客户端验证
node_name: "APIServer1" #用于识别是那台sidecar发来的日志信息
update_interval: 10    #多久 Sidecar 向 Graylog 报告一次自己的运行状况,以及抓取最新下发的配置文件。
send_status: true  # 是否向 Graylog 报告自己的状态信息。

启动:

graylog-sidecar -service install && systemctl start graylog-sidecar && systemctl enable graylog-sidecar  
 #这里可能无法正常启动,应为我们的server_api_token是空的,待会配置上在重启下服务

在客户端安装 Filebeat

安装:
我们同样采用RPM包安装,这个要在需要收集日志的机子上安装

下载地址: https://www.elastic.co/cn/downloads/beats/filebeat

在这里插入图片描述
直接rpm 安装即可

rpm -ivh filebeat-7.15.0-x86_64.rpm

配置:
这里Filebeat只是个采集工具,可以直接使用Sidecar 去调用,不需要配置,直接启动就可以了

启动:

systemctl enable filebeat && systemctl start filebeat

在Server服务端添加Sidecar

去服务端添加Sidecar,刚刚我们配置的客户端,用于收集那台机器的日志。

  1. 添加 Sidecar 秘钥
    还记得前面配置空的那个server_api_token么,现在就去生成。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

这时候在重启客户端的graylog-sidecar服务就正常了。
在这里插入图片描述

  1. 设置inputs接入日志

在这里插入图片描述
输入的类型选择beats
在这里插入图片描述
填写一些输入信息的参数
在这里插入图片描述

注意:上图的Bind Address:是填写安装Sidecar客户端的IP,应为我是和服务端安装在一台机器上了,所以就写了0.0.0.0
保存后就可以看到有一个接入口。如下图
在这里插入图片描述
3. 通过server 对 Sidecar 进行配置,收集filebeat日志

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
图中的配置文件

# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}


filebeat.inputs:    # 输入方式,是Filebeat
- input_type: log   
  paths: 
    - /var/log/*.log   # 日志目录
  type: log       # 输入类型 log
  
- input_type: log
  paths:
    - /data/nginx/logs/access.log     # 在收集Nginx访问记录日志
  type: log
  tags: -Nginx-succeed  # 可以打个标签
  
- input_type: log
  paths:
    - /data/nginx/logs/error.log   # 在收集Nginx 错误日志
  type: log
  tags: Nginx-error
  
  
output.logstash:
   hosts: ["127.0.0.1:5044"]    # 定义Sidecar的客户端的地址和端口
path:
  data: /var/lib/graylog-sidecar/collectors/filebeat/data   # 从Filebeat搜集后暂存的数据目录
  logs: /var/lib/graylog-sidecar/collectors/filebeat/log  # 从Filebeat搜集后暂存的日志目录

现在返回主页,就可以看到搜集的日志了

在这里插入图片描述

下面是两个其他模板,供修改参考

模板一:



# Needed for Graylog
fields_under_root: true
## ↑ 用于定义你的特别字段,比如下面那些。这些被标记为 under_root 的数值拥有最高优先级,会覆盖掉任何在这
## 之后的字段。按排列的先后顺序覆盖,比如你如果写了两个 fields.source,那么只有最靠前的会生效;如果你在
## 下面的 fleids 里自定义了 fields.source,也会被这里面 under_root 的给覆盖掉。

fields.collector_node_id: ${sidecar.nodeName}
## ↑ 这个 “sidecar.nodeName” 变量,就是在配置 Sidecar 时候提到的那个 “nodeName”,记起来了吗?这个用于
## 图表统计和消息分类很有必要。

fields.source: ${sidecar.nodeName}
## ↑ 一定要留意加入了这行配置!!否则日志展示界面 “Source” 会提示 “unknown”,
## 图表也会很难做,因为你再多服务器,也只有一个来源 “unknown”。另外说回为什么上面
## “Do not add Beats type as prefix” 要勾选的问题。如果那个勾没打,那么这里的 “fields.source” 和 
## “sidecar.nodeName” 都会不叫这个名字,也就是说你这套配置你套进去,“Source” 一样是 “unknown”,因为 
## 它根本不叫 “fields.source” 。叫啥我还没摸出来,总之打钩后,按我调的这套配置是没问题的。

fields.gl2_source_collector: ${sidecar.nodeId}

# AAA API                #这里创建第一个 filebeat.inputs 配置。
filebeat.inputs:
- type: log                    #指定日志收集类型,因为是收集 tomcat 日志,所以 type 是 log。
  paths:
    - /data/service/service1/logs/catalina-daemon.out
##  ↑ 指定日志位于哪个路径,可以用“*”号,或者写多行“-”的方式来指定多个路径。
  multiline.pattern: '^[[:space:]]+(?:at\b|\.{3}\B)|^Caused by:'
## ↑ 这里很重要,这个是决定 Filebeat 能不能收集 Java 堆栈日志这种多行日志的配置。
## 这个正则和相关参数可以照抄。不要用 Filebeat 官方的正则,那个正则是错误的。
  multiline.negate: false
  multiline.match: after
  tags: Catalina-AAAAPI
## ↑ 打了这个 tags 后,这些附加信息会随着 Filebeat 的信息流一起传过来,可以更易于分类消息是从哪个地方
## ,或哪个服务采集来的,这个对后面做分类搜索——也就是 Stream 会用到,也算是很重要的一个配置,否则你多个
## 服务发来的日志经由同一个 Input 进来,所有日志都没有标记特征信息,会变得很难以区分。
## 还有一个用法是写 fields,比如:
#  fields:
#    server: aaaapi-catalina
## 这个 field 实际上是一个自定义的“key: value”,你可以写任何东西,比如我上面
## 写了 “server: mobileapi-catalina”,你可以写成类似
##  “foo: bar” 等任何东西,这个 fields 的作用跟上面的 tags 类似,只不过 tags 更“正式化”一点
## 用 Filebeat 和 Logstash 对接过的人应该知道这个用法。

# BBBAPI
## ↑ 不赘述了,配置一样,但是注意 “filebeat.inputs” 只写一次,不要重复写了!!重复写只会
## 生效最靠近底下的一个。
- type: log
  paths:
    - /data/service/service2/logs/catalina-daemon.out
  multiline.pattern: '^[[:space:]]+(?:at\b|\.{3}\B)|^Caused by:'
  multiline.negate: false
  multiline.match: after
  tags: Catalina-BBBAPI
  
# CCC Service
- type: log
  paths:
   - /data/service/service3/logs/catalina-daemon.out
  multiline.pattern: '^[[:space:]]+(?:at\b|\.{3}\B)|^Caused by:'
  multiline.negate: false
  multiline.match: after
  tags: Catalina-CCC
  
# Metabase
## ↑ 这里比较例外,Metabase 是个用 Docker 起的服务,所以这里的 type 是 docker
- type: docker
## ↑ 这个写法其实局限性极大,应该说 filebeat 收集单容器(没上 K8s)都很局限性,
## 因为只支持容器 ID 或容器的日志路径,你更新一次容器,ID 就变了,但K8s 支持容器名定义。
  containers.ids:
## ↑ 这里指定了一个容器 ID,能不能写短 ID 我没测,应该理论上是没问题的。
    - 'a67b30747290fc0e31f3cbfdc494fef20f54aed29cdc7d8b842ed6f3b3bad9c2'
  tags: Docker-Metabase     # tags 用法,不赘述了
  multiline.pattern: '^.|^\#+'
## ↑ 这个也是为了匹配多行日志的,metabase 会有一些很神奇的日志格式,比如 echo 上色什么的,
## 这些对 Filebeat 很不友好,
## 因为会抓到大量的中括号和斜杠以及 “#” 号等乱七八糟的东西。
  multiline.negate: false
  multiline.match: after


output.logstash:
## ↑ 这里指定将收集到的日志输出到哪里
   hosts: ${user.hostIP}
## ↑ 调用了一个参数 ${user.hostIP},这个参数可以在右侧的“Variables”选项卡设置。
## 你只需要起名和填写内容就行了,## 这里写我们在 Input 里配置的信息,比如我没有在 Graylog-server 
## 的配置中启用 bind,所有 Sidecar 都在一个大内网,端口是 5044,那么## 就是172.××.×.111:5044。
## Save 后会自动生成一个参数名,比如上面的 ${user.hostIP}


path:                        #这两行是用于覆写 filebeat 日志输出记录的配置
  data: /var/lib/graylog-sidecar/collectors/filebeat/data
  logs: /var/lib/graylog-sidecar/collectors/filebeat/log

模板二:

# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}

###  Nginx-access  ###
filebeat.inputs:
- input_type: log
  paths:
    - /var/log/nginx/access.log
  type: log
  tags: 192.168.12.161-Nginx-succeed
  
###  Nginx-erro  ###
- input_type: log
  paths:
    - /var/log/nginx/error.log
  type: log
  tags: 192.168.12.161-Nginx-fail
  
###  Nginx-xintong  ###
- input_type: log
  paths:
    - /var/log/*
  type: log
  tags: 192.168.12.161-xitong
  
###  tomcat  ###
- input_type: log
  paths:
    - /var/log/nginx/rizhi/catalina.out-20210923
  multiline.pattern: '^[[:space:]]+(?:at\b|\.{3}\B)|^Caused by:'
  multiline.negate: false
  multiline.match: after
  type: log
  tags: 192.168.12.161-tomcat
  
###  nginx-test  ###
- input_type: log
  paths:
    - /var/log/nginx/rizhi/nginx-test.log
  multiline.pattern: '^[[:space:]]+(?:at\b|\.{3}\B)|^Caused by:'
  multiline.negate: false
  multiline.match: after
  type: log
  tags: 192.168.12.161-Nginx-test
  
output.logstash:
   hosts: ["192.168.12.161:5044"]
path:
  data: /var/lib/graylog-sidecar/collectors/filebeat/data
  logs: /var/lib/graylog-sidecar/collectors/filebeat/log


通过Nginx日志做地图标识

  1. 截取IP字段
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 配置 GeoLite2-City,将IP字段转换为物理位置
    ①.下载GeoLiteCity,
下载地址:https://dev.maxmind.com/geoip/geolite2-free-geolocation-data

需要邮箱注册一个用户,登陆即可免费下载,下载的是一个 GeoLite2-City.mmdb的二进制格式数据库,
里面存储的就是ip和地理位置的信息,把这个文件放到 server端 /etc/graylog/server/GeoLite2-City.mmdb
要注意的是,为了保证数据的准确性,这个数据库文件尽可能的每隔一段时间去重新下载,替换下。
保证转换的是最新的地址
如果觉得不方便,博主提供了一份2021-9月的地图数据,供你测试 https://mp.csdn.net/mp_download/manage/download/UpDetailed

在这里插入图片描述
② 上传到server端 ,/etc/graylog/server 下
在这里插入图片描述
③ 去web端配置Geopip插件
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
④. 把Gpio插件顺序调到最下面
在这里插入图片描述

在这里插入图片描述
3. 新建一个地图仪表盘
可以看到,我们左侧已经有提取的IPV4字段和相应的城市以及位置信息

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

======================================================================================================================================================================================================================================================================================================
辛苦浏览观看,如果对你有帮助,请顺手点个赞吧 (σ゚∀゚)σ…:*☆

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

king config

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值