ELFK 分布式日志收集系统

  • ELFK的组成:

    • Elasticsearch: 它是一个分布式的搜索和分析引擎,它可以用来存储和索引大量的日志数据,并提供强大的搜索和分析功能。 (java语言开发,)
    • logstash: 是一个用于日志收集,处理和传输的工具,它可以从各种数据源收集日志数据,对数据进行处理和过滤,将数据发送到Elasticsearch。 java
    • kibana: 是一个用于数据可视化和分析的工具,它可以与Elasticsearch集成,帮助用户通过图表、仪表盘等方式直观地展示和分析日志数据。 java
    • filebeat: 轻量级日志收集工具,一般安装在客户端服务器上负责收集日志,传输到ES或logstash go
  • 本章实验环境拓扑图:

    • 版本介绍:
      • Elasticsearch:6.6.0
      • kibana:6.6.0
      • filebeat:6.6.0
      • nginx:1.18.0
      • Redis:5.0.7
      • logstash:6.6.0
    • 开始部署:
      • 部署8.8服务器的es和Kibna:a
        • 复制软件包至服务器下安装:
          • rpm -ivh elasticsearch-6.6.0.rpm
          • 修改配置文件:
            • vim /etc/elasticsearch/elasticsearch.yml
              • node.name: es1						
                path.data: /data/elasticsearch			
                path.logs: /var/log/elasticsearch		
                bootstrap.memory_lock: true				
                network.host: 192.168.8.8,127.0.0.1	
                http.port: 9200			

          • 创建数据目录,并修改权限
            • mkdir -p /data/elasticsearch 
              chown -R elasticsearch.elasticsearch /data/elasticsearch/
              

          • 启动es:systemctl start elasticsearch
        • 部署安装kibana:
          • 安装kibana:rpm -ivh kibana-6.6.0-x86_64.rpm 
          • 修改配置文件:
            • 修改项:
              • server.port: 5601
                server.host: "192.168.8.8"
                server.name: "db01" 	#自己所在主机的主机名
                elasticsearch.hosts: ["http://192.168.8.8:9200"]   #es服务器的ip,便于接收日志数据
                保存退出

          • 启动kibana:systemctl start kibana
          • 查看两个服务的端口是否存在:
            • netstat -anpt | grep 5601
            • netstat -anpt | grep 9200
      • 部署8.9服务器山的nginx和filebeat:
        • 安装filebeat:
          • rpm -ivh filebeat-6.6.0-x86_64.rpm 
        • 修改配置文件:
          • vim /etc/filebeat/filebeat.yml (清空源内容,直接覆盖)
            • filebeat.inputs:		(日志来源)
              - type: log			(日志格式)enabled: true		(开机自启)paths:			(日志路径)- /var/log/nginx/access.logoutput.elasticsearch:		(日志传送到那)hosts: ["192.168.8.8:9200"]
              

          • 启动filebeat服务:

            • systemctl start filebeat

        • 安装nginx:

          • yum -y install nginx

          • 启动nginx:nginx

      • 在8.8服务器上安装网站压力测试工具:

        • yum -y install  httpd-tools

      • 2.使用ab压力测试工具测试访问

        • ab -c 1000 -n 20000 http://192.168.8.9/
          -c(并发数) -n(请求数)

    • 使用浏览器扩展程序登录es查看索引是否有访问数:

    • 修改nginx的日志格式为json格式:

      • vim /etc/nginx/nginx.conf

        • 添加在http{}内:

        • log_format log_json '{ "@timestamp": "$time_local", '
          '"remote_addr": "$remote_addr", '
          '"referer": "$http_referer", '
          '"request": "$request", '
          '"status": $status, '
          '"bytes": $body_bytes_sent, '
          '"agent": "$http_user_agent", '
          '"x_forwarded": "$http_x_forwarded_for", '
          '"up_addr": "$upstream_addr",'
          '"up_host": "$upstream_http_host",'
          '"up_resp_time": "$upstream_response_time",'
          '"request_time": "$request_time"'
          ' }';access_log  /var/log/nginx/access.log  log_json;

      • 重启服务:systemctl restart nginx

    • 修改filebeat.yml文件,区分nginx的访问日志和错误日志

      • vim /etc/filebeat/filebeat.yml

        • 修改为:
          filebeat.inputs:
          - type: logenabled: truepaths:- /var/log/nginx/access.logjson.keys_under_root: truejson.overwrite_keys: truetags: ["access"]- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["error"]output.elasticsearch:hosts: ["192.168.8.8:9200"]indices:- index: "nginx-access-%{+yyyy.MM.dd}"when.contains:tags: "access"- index: "nginx-error-%{+yyyy.MM.dd}"when.contains:tags: "error"setup.template.name: "nginx"
          setup.template.patten: "nginx-*"
          setup.template.enabled: false
          setup.template.overwrite: true

      • 重启服务:systemctl restart filebeat

    • 使用ab工具压力测试一下网站:

      • 测试访问数据:ab -c 1000 -n 20000 http://192.168.8.9/

      • 测试错误数据:ab -c 1000 -n 20000 http://192.168.8.9/444.html

      • 可以看到es收集到了两个索引:

    • 使用kibana图形化展示日志访问数据:

      • http://192.168.8.8:5601/

      • 创建索引,图形化展示:

      • 按照此步骤 将error错误索引页创建一下即可

    • 虽然以上环境也可以进行日志收集,但只适用于中小型公司,以下再多增加一台服务器,安装redis实现消息队列,和logstash日志采集,增加吞吐量。

    • 在8.10服务器上部署redis和logstash:

      • 准备安装目录和数据目录:

        • mkdir -p /data/soft
          mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
          

      • 下载redis安装包:

        • cd /data/soft
          wget http://download.redis.io/releases/redis-5.0.7.tar.gz
          

      • 将软件包解压到/opt/redis_cluster文件夹中:

        • tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
          ln -s /opt/redis_cluster/redis-5.0.7  /opt/redis_cluster/redis

      • 切换目录编译安装redis:

        • cd /opt/redis_cluster/redis
          make && make install 

      • 编写redis配置文件:

        • vim /opt/redis_cluster/redis_6379/conf/6379.conf

          • bind 127.0.0.1 192.168.8.10
            port 6379
            daemonize yes
            pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
            logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
            databases 16
            dbfilename redis.rdb
            dir /opt/redis_cluster/redis_6379

        • 启动redis服务:redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

      • 修改8.9的filebeat文件(将filebeat收集的日志转发给redis):

        • vim /etc/filebeat/filebeat.yml

          • filebeat.inputs:
            - type: logenabled: truepaths:- /var/log/nginx/access.logjson.keys_under_root: truejson.overwrite_keys: truetags: ["access"]- type: logenabled: truepaths:- /var/log/nginx/error.logtags: ["error"]setup.template.settings:index.number_of_shards: 3setup.kibana:output.redis:hosts: ["192.168.8.10"]key: "filebeat"db: 0timeout: 5

        • 重启服务:systemctl restart filebeat
        • 再次在8.8上使用压力测试工具访问网站:ab -c 1000 -n 20000 http://192.168.8.9/
        • 登录redis数据库:redis-cli
          • 查看是否有以filebeat命名的键:
          • filebeat与redis关联成功!
    • 继续在8.10服务器上部署logstash:
      • rpm -ivh logstash-6.6.0.rpm 
      • 修改logstash配置文件,实现access和error日志分离
        • vim /etc/logstash/conf.d/redis.conf
          • input {redis {host => "192.168.8.10"port => "6379"db => "0"key => "filebeat"data_type => "list"}
            }filter {mutate {convert => ["upstream_time","float"]convert => ["request_time","float"]}
            }output {stdout {}if "access" in [tags] {elasticsearch {hosts => ["http://192.168.8.8:9200"]index => "nginx_access-%{+YYYY.MM.dd}"manage_template => false}}if "error" in [tags] {elasticsearch {hosts => ["http://192.168.8.8:9200"]index => "nginx_error-%{+YYYY.MM.dd}"manage_template => false}}
            }

        • 最后重启logstash:
          • /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
            

        • 过程需等待,启动较慢(大约2-3分钟)

      • 最后通过kibana图形化界面,可以看到nginx的access日志和error错误日志即可,最终效果和仅部署elk效果一致,只不过添加了redis数据库和filebeat日志收集工具,有了redis可以实现了消息队列为es服务器减轻了压力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收割机案例-简单的动态规划

#include<iostream> using namespace std; // 创建土地 short land[32][32]; short n,m;// 实际使用的土地大小 short landA[32][32];//用A收割机收割数量记录 short landB[32][32];// 用B收割机收割数量记录 int main(){cin>>n>>m;// 存储农作物产量for(sho…

C#,子集和问题(Subset Sum Problem)的算法与源代码

1 子集和问题&#xff08;Subset Sum Problem&#xff09; 给定一组非负整数和一个值和&#xff0c;确定给定集合中是否存在和等于给定和的子集。 示例&#xff1a; 输入&#xff1a;set[]{3&#xff0c;34&#xff0c;4&#xff0c;12&#xff0c;5&#xff0c;2}&#xff…

【快速入门 Vue 框架:从基础到实践】

在现代的 Web 开发中&#xff0c;Vue.js 已经成为了一种非常流行的 JavaScript 框架。它的简洁性和灵活性使得开发者能够快速构建交互性强、高效的用户界面。本文将带领读者从基础开始&#xff0c;逐步掌握 Vue 框架的核心概念&#xff0c;并通过实例演示如何快速上手 Vue 框架…

WPF LinearGradientBrush立体效果

WPF LinearGradientBrush立体效果 渐变方向 1. 默认是左上角到右下角 2.从左到右 <Border Height"35" Width"120"><Border.Background><LinearGradientBrush EndPoint"1,0"><GradientStop Color"Yellow"Offs…

28.基于SpringBoot + Vue实现的前后端分离-在线文档管理系统(项目 + 论文PPT)

项目介绍 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&…

Qt插件之输入法插件的构建和使用(一)

文章目录 输入法概述输入法插件实现及调用输入键盘搭建定义样式自定义按钮实现自定义可拖动标签数字符号键盘候选显示控件滑动控件手绘输入控件输入法概述 常见的输入法有三种形式: 1.系统级输入法 2.普通程序输入法 3.程序自带的输入法 系统级输入法就是咱们通常意义上的输入…

爬虫练习:获取某招聘网站Python岗位信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(拉钩Python岗位数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [公司, 规模,岗位,地区,薪资,经验要求]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer…

springboot262基于spring boot的小型诊疗预约平台的设计与开发

小型诊疗预约平台 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本小型诊疗预约平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理…

【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别

文章目录 0. 前言1. 级联神经网络介绍2. MTCNN介绍2.1 MTCNN提出背景2.2 MTCNN结构 3. MTCNN PyTorch实战3.1 facenet_pytorch库中的MTCNN3.2 识别图像数据3.3 人脸识别3.4 关键点定位 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff…

DenseNet笔记

&#x1f4d2;from ©实现pytorch实现DenseNet&#xff08;CNN经典网络模型详解&#xff09; - 知乎 (zhihu.com) 是什么之 DenseBlock 读图&#xff1a; x0是inputH1的输入是x0 (input)H2的输入是x0和x1 (x1是H1的输出) Summary&#xff1a; 传统卷积网&#xff0c;网…

IDEA管理Git + Gitee 常用操作

文章目录 IDEA管理Git Gitee 常用操作1.Gitee创建代码仓库1.创建仓库1.点击新建仓库2.完成仓库信息填写3.创建成功4.管理菜单可以修改这个项目的设置 2.设置SSH公钥免密登录基本介绍1.找到.ssh目录2.执行指令 ssh-keygen3.将公钥信息添加到码云账户1.点击设置2.ssh公钥3.复制.…

ETL与抖音数据同步,让数据流动无阻

在当今数字化时代&#xff0c;数据的价值日益凸显&#xff0c;企业需要从各种渠道获取有关用户行为、市场趋势和竞争对手活动的数据。作为一家专注于数据集成和转换的领先平台&#xff0c;ETLCloud为企业提供了强大的数据同步和转换功能。而与此同时&#xff0c;抖音作为一款热…

论文解读:Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning

文章汇总 总体问题 通过对整体分类的训练(文章结构图中ClassifierBaseline)&#xff0c;即在整个标签集上进行分类&#xff0c;它可以得到与许多元学习算法相当甚至更好的嵌入。这两种工作之间的界限尚未得到充分的探索&#xff0c;元学习在少样本学习中的有效性仍然不清楚。…

Visual C++ 2010学习版安装教程

1. 创建项目 点击 “创建新项目”&#xff0c;创建一个项目。 2. 创建 helloworld.c ⽂件 3. 在弹出的编辑框中&#xff0c;选中 “C文件(.cpp)”&#xff0c;将 下方 “源.cpp” 手动改为要新创建的文件名。 如&#xff1a;helloWorld.c 。注意&#xff0c;默认 cpp 后缀名&am…

java SSM旅游景点与公交线路查询系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM旅游景点与公交线路查询系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系…

趣学前端 | Taro迁移完成之后,总结了一些踩坑经验

背景 四月份的时候&#xff0c;尝试将老的移动端项目改造成多端。因为老项目使用的React框架&#xff0c;综合考量&#xff0c;保障当前业务开发的进度同时&#xff0c;进行项目迁移&#xff0c;所以最后选择了Taro框架。迁移成本会低一些&#xff0c;上手快一些。 上个月&am…

CAN一致性测试:物理层测试之终端电阻测试

从本周开始结合工作实践&#xff0c;给大家总结CAN一致性相关的测试 包括&#xff1a;物理层、数据链路层、应用层三大块知识点 CAN一致性测试:物理层测试之终端电阻测试 试验目的&#xff1a; 测试控制器的 CANH 对地、CANL 对地、CANH 对 CANL 的内阻是否符合 ISO11898-2的…

读写算杂志《读写算》杂志社读写算杂志社2024年第7期目录

教育资讯 全国学生心理健康工作咨询委员会第一次全体会议召开 1 扩优提质 区域先行——基础教育高质量发展现场会在福州晋安召开 1-2 河北唐山曹妃甸&#xff1a;新学期抓好四项工作 2-3 崇红立志——江苏盐城亭湖7万学生争做新时代红色少年 3 习作选登 秋…

ubuntu設定QGC獲取pixhawk Mini4(PX4 Mini 4) 的imu信息

ubuntu20.04 QGC使用v4.3.0的版本 飛控pixhawk Mini4 飛控上只使用一條micro USB連接電腦&#xff0c;沒有其他線 安裝命令 sudo apt-get remove modemmanager -y sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libf…

python之数组,链表,栈,队列

1.数组 优点&#xff1a; 索引操作速度快&#xff1a;通过索引可以直接访问元素&#xff0c;因此索引操作的时间复杂度是 $O(1)$&#xff0c;即常数级 缺点&#xff1a; 插入、删除元素慢&#xff1a; 如果需要在中间或开始位置插入或删除元素&#xff0c;可能需要移动大量…