ELK综合案例

综合案例

ELK+filebeat+nginx+json

nginx配置

1,在nginx服务器上安装nginx

# yum install epel-release
# yum install nginx

2,将nginx日志改成json格式,这样各个字段就方便最终在kibana进行画图统计了

# vim /etc/nginx/nginx.conf
​
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
​
    log_format json '{ "@timestamp": "$time_iso8601", '
         '"remote_addr": "$remote_addr", '
         '"remote_user": "$remote_user", '
         '"body_bytes_sent": "$body_bytes_sent", '
         '"request_time": "$request_time", '
         '"status": "$status", '
         '"request_uri": "$request_uri", '
         '"request_method": "$request_method", '
         '"http_referer": "$http_referer", '
         '"http_x_forwarded_for": "$http_x_forwarded_for", '
         '"http_user_agent": "$http_user_agent"}';
​
    access_log  /var/log/nginx/access.log  json;        把main格式换为json格式
    
    
 # systemctl restart nginx
 # systemctl enable nginx

3,使用浏览器或curlelinks访问nginx.然后查看日志,发现都变成可以转成json格式的格式

# tail -1 /var/log/nginx/access.log
{ "@timestamp": "2019-07-04T17:19:27+08:00", "remote_addr": "10.1.1.1", "remote_user": "-", "body_bytes_sent": "3650", "request_time": "0.000", "status": "404", "request_uri": "/favicon.ico", "request_method": "GET", "http_referer": "-", "http_x_forwarded_for": "-", "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Maxthon/5.1.5.1000"}

filebeat配置

1,在nginx服务器上安装filebeat安装(filebeat要安装到nginx服务器上收集)

过程省略

2,配置filebeat输出给redis

# cat /etc/filebeat/filebeat.yml | grep -v "#" | grep -v "^$"
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
output.redis:
  hosts: ["10.1.1.14"]                                  IP为redis服务器IP
  password: "123456"                                    redis的密码
  key: "filebeattoredis"
  db: 0
  datatype: list
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
​
# systemctl restart filebeat
# systemctl enable filebeat

redis配置

1, 在redis服务器上,安装redis并启动(需要epel源)

# yum install redis -y
​
# vim /etc/redis.conf
61  bind 10.1.1.14                      需要filebeat可以连接,或者改为0.0.0.0
​
480 requirepass 123456
​
# systemctl start redis
# systemctl enable redis

# redis-cli -h 10.1.1.14 -a 123456
10.1.1.14:6379> keys *
1) "filebeattoredis"
10.1.1.14:6379> llen filebeattoredis
(integer) 6                          使用浏览器访问nginx,这里就会有相关信息,6表示有6条日志在队列中

logstash配置

1, 在logstash服务器上安装logstash

过程省略

2, 配置logstash,输入为redis,输出给es

# vim /etc/logstash/conf.d/logstash_from_redis.conf
input {
    redis {
        host => "10.1.1.14"
        port => 6379
        password => "123456"
        db => "0"
        data_type => "list"
        key => "filebeattoredis"
    }
}
​
filter {
​
}
​
output {
        elasticsearch {
              hosts  => ["http://10.1.1.12:9200","http://10.1.1.11:9200"]
              index  => "filebeattoredis-%{+YYYY.MM.dd}"
        }
        stdout {
        
        }
}
​
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/logstash_from_redis.conf

3, 在redis服务器上查看

# redis-cli -h 10.1.1.14 -a 123456
10.1.1.14:6379> LLEN filebeattoredis
(integer) 0                            为0了,表示上面6条信息被传到了logstash

# cat /etc/logstash/conf.d/logstash_from_redis.conf
input {
    redis {
        host => "10.1.1.14"
        port => 6379
        password => "123456"
        db => "0"
        data_type => "list"
        key => "filebeattoredis"
    }
}
​
filter {
    json {
        source => "message"
    }
​
}
​
output {
        elasticsearch {
            hosts  => ["http://10.1.1.12:9200","http://10.1.1.11:9200"]
            index  => "filebeattoredis-logstashfromredis-%{+YYYY.MM.dd}"
        }
        stdout { 
            
        }
}
​
注意:这次使用了json插件,索引名请再修改一个新的
如果要画图的话,请重新创建索引模式来匹配新的索引,才能在图形里找到remote_addr这个字段**
​
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/logstash_from_redis.conf

ELK+filebeat+nginx+grok+geoip

上面的做法还不够高级,下面使用grok插件与geoip插件来实现

1, 停掉前面的logstash进程

  • 如果是前台启动,直接ctrl+c即可

  • 如果是后台启动, 使用ps -ef |grep java找出pid,再kill -9 PID

2, 修改nginx日志格式

# vim /etc/nginx/nginx.conf
​
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
​
​
    access_log  /var/log/nginx/access.log  main;        改为main格式
​
 # systemctl restart nginx
​

3, 清空日志

# echo > /var/log/nginx/access.log
可以让客户端重新访问几次,确认日志格式正常

4, 配置filebeat并重启

[root@app ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/nginx/access.log
  fields:
    app: www
    type: nginx
  fields_under_root: true
​
output.redis:
  hosts: ["10.1.1.14"]
  password: "123456"
  key: "filebeattoredis2"
  db: 0
  datatype: list
  
# systemctl restart filebeat

5, 客户端访问nginx, 查看redis是否有队列

# redis-cli -h 10.1.1.14 -a 123456
10.1.1.14:6379> keys *
1) "filebeattoredis2"
10.1.1.14:6379> llen filebeattoredis2
(integer) 2

6, 使用logstash grok插件完成对nginx日志格式化

# vim /etc/logstash/conf.d/logstash_nginx_format.conf
input {
    redis {
        host => "10.1.1.14"
        port => 6379
        password => "123456"
        db => "0"
        data_type => "list"
        key => "filebeattoredis2"
    }
}
​
filter {
  if [app] == "www" {
    if [type] == "nginx" {
      grok {
        match => {
          "message" => "%{IPV4:remote_addr} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:time_local}\] \"%{WORD:request_method} %{URIPATHPARAM:request_uri} HTTP/%{NUMBER:http_protocol}\" %{NUMBER:http_status} %{NUMBER:body_bytes_sent} \"%{GREEDYDATA:http_referer}\" \"%{GREEDYDATA:http_user_agent}\" \"(%{IPV4:http_x_forwarded_for}|-)\""
        }
        overwrite => ["message"]
      }
      geoip {
          source => "remote_addr"
          target => "geoip"
          database => "/opt/GeoLite2-City.mmdb"
          add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
          add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
      }
      date {
          locale => "en"
          match => ["time_local", "dd/MMM/yyyy:HH:mm:ss Z"]
      }
      mutate {
          convert => ["[geoip][coordinates]", "float"]
      }
    }
  }
}
​
output {
  elasticsearch {
      hosts  => ["http://10.1.1.12:9200","http://10.1.1.11:9200"]
      index  => "logstash-nginx-log-format-%{type}-%{+YYYY.MM.dd}"
  }
  stdout{
  }
}
​
​
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/logstash_nginx_format.conf

7, 确认redis队列为0,说明传给了logstash

# redis-cli -h 10.1.1.14 -a 123456
10.1.1.14:6379> keys *
1) "filebeattoredis2"
10.1.1.14:6379> llen filebeattoredis2
(integer) 2

8, 模拟假的客户端访问数据(主要是模拟一些假的公网IP)

可手动在nginx服务器上vim /var/log/nginx/access.log复制粘贴多行,然后改成不同的公网IP

9, 在kibana创建索引模式

过程省略

10, 在kibana创建可视化图形

使用unique count用于计算地图区域的客户端IP统计

11, 可选择创建仪表盘,将图形加入仪表盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Git提交错误分支

如果 Git 提交到错误的分支&#xff0c;可以通过以下步骤将其转移到正确的分支上&#xff1a; 1.检查当前所在的分支&#xff0c;可以通过 git branch 命令查看。 git branch2.切换到正确的分支&#xff0c;可以通过 git checkout <正确的分支名> 命令进行切换。 git …

windows系统proteus中Ardunio Mega 2560和虚拟机上Ubuntu系统CuteCom进行串口通信

在文章利用proteus实现串口助手和arduino Mega 2560的串口通信-CSDN博客 中&#xff0c;实现了windows系统的proteus中Ardunio Mega 2560和SSCOM通过虚拟串口进行通信。虚拟串口的连接示意图如下图所示。 在文章windows系统和虚拟机上ubuntu系统通过虚拟串口进行通信-CSDN博客…

高级网工在Linux服务器抓包,少不了这几条常用的tcpdump命令。

Linux 的命令太多&#xff0c;tcpdump 是一个非常强大的抓包命令。有时候想看线上发生的一些问题&#xff1a; nginx 有没有客户端连接过来…… 客户端连接过来的时候 Post 上来的数据对不对…… 我的 Redis 实例到底是哪些业务在使用…… tcpdump 作为网络分析神器就派上用场…

2023年四川网信人才技能大赛 实操赛Writeup

文章目录 Crypto比base64少的baseaffine简单的RSA Misc不要动我的flagSimpleUSB猜猜我是谁不聪明的AI Pwngetitezbbstack Reverse谁的DNA动了Dont Touch Me Weblittle_gamejustppbezbbssmart 题目附件&#xff0c;文章末尾微信公众号点点关注亲&#xff0c;谢谢亲~ 题目附件链接…

Ubuntu安装TensorRT

文章目录 1. 安装CUDAa. 下载CUDAb. 安装CUDAc. 验证CUDA 2. 安装CUDNNa. 下载CUDNNb. 安装CUDNNc. 验证CUDNN 3. 安装TensorRTa. 下载TensorRTb. 解压TensorRTc. 安装TensorRTd. 安装uff和graphsurgeone. 验证是否安装成功f. 备注 关注公众号&#xff1a;『AI学习星球』 回复&…

机器学习算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

Halcon 简单的ORC 字体识别

文章目录 仿射变化识别使用助手自己训练 仿射变化 将图片进行矫正处理 dev_close_window() dev_open_window(0, 0, Width, Height, black, WindowHandle) read_image(Image,C:/Users/Augustine/Desktop/halcon/image.png) *获取图片的大小 get_image_size(Image, Width, Height…

宝塔面板部署Apache服务器搭建本地站点发布到公网可访问【内网穿透】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

什么是HTTP/2?它与HTTP/1.x相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

php 接入 百度编辑器

按照github上的操作下载百度编辑器的包后&#xff0c;根据文档上的步骤操作&#xff08;可能会遇到报错&#xff09;&#xff1a; 1、git clone 仓库 2、npm install 安装依赖&#xff08;如果没有安装 grunt , 请先在全局安装 grunt&#xff09; 我的是报了下面的错&#…

安装Nacos2.2.3集群

目录 一、传统方式安装 二、Docker安装 一、传统方式安装 1、配置jdk环境 vi /etc/profile JAVA_HOME/usr/local/java JRE_HOME/usr/local/java/jre CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH$JAVA_HOME/bin:$PATH export PATH JAVA_…

windows启动出现 zookeeper此处不应有java

可能是Java 路径出了问题&#xff0c;这个programFiles直接有空格&#xff0c;没错就有空格&#xff0c;笔者一开始以为这么点算什么空格&#xff0c;需要把这个对应的Java文件到别的英文路径下&#xff0c;并且修改环境变量。就可以启动的。 还可以启动方式有很多种&#xff0…

vs vue项目目录说明

vue项目目录结构说明 视图&#xff1a; 主要描述src和依赖配置 src下 assets:存放需要用到的静态资源文件的地方 如css.js.img.view等 commponents:存放一些通用的组件&#xff1b;例&#xff1a;在开发当中如果有需要抽出来的公用模块&#xff0c;可以封装为通用组件&#xf…

【C++】异常 -- 详解

一、C 语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 终止程序&#xff0c;如 assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除 0 错误时就会终止程序。 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。…

vulnhub靶机hacksudo FOG

下载地址&#xff1a;hacksudo: FOG ~ VulnHub 主机发现 目标148 端口扫描 IP过多整理一下 扫描服务 漏洞扫描 去80看看 经典凯撒&#xff0c;后面还是一个github 好好好&#xff0c;mp4 接下来目录爆破 一个一个去看 失败了换一个 少模块&#xff0c;有点麻烦&#xff0c;直接…

C++ //习题2.3 写出以下程序运行结果。请先阅读程序,分析应输出的结果,然后上机验证。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题2.3 习题2.3 写出以下程序运行结果。请先阅读程序&#xff0c;分析应输出的结果&#xff0c;然后上机验证。 #include <iostream> using namespace std;int main(){char c1 a, c2 b, c3 c, c4 \101, c5 \116…

scala表达式

1.8 表达式&#xff08;重点&#xff09; # 语句(statement)&#xff1a;一段可执行的代码# 表达式(expression)&#xff1a;一段可以被求值的代码&#xff0c;在Scala中一切都是表达式 - 表达式一般是一个语句块&#xff0c;可包含一条或者多条语句&#xff0c;多条语句使用“…

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

一.背景 此问题是蓝牙列表界面息屏后再点击亮屏蓝牙界面卡住,划不动也不能返回,在人多的时候(附近开启的蓝牙设备过多的时候)会卡住大概四五秒才能滑动. 优化前效果见资源: 二.查找耗时点 根据Android Studio的Profiler工具进行排查,查找主线程时间线比较长的方法,如下:…

java打包到docker,以及idea远程调试

这里主要介绍 dockerfile的打包方式 一、打包jar包到容器 1. 在要打包的项目中创建dockerfile&#xff0c;dockerfile与项目的pom.xml是同级 2. 编辑dockerfile文件 FROM openjdk:8 VOLUME ["/data/untitled"] COPY target/untitled-1.0.jar "/app.jar"…

Proteus仿真--射击小游戏仿真设计

本文介绍基于proteus射击小游戏仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 K1-K4为4个按键&#xff0c;用于上移、下移、确认等&#xff0c;模拟单机游戏 仿真运行视频 Proteus仿真--射击小游戏仿真设计 附完整Proteus仿真资料代码资料 …