elk stack部署自动化日志收集分析平台

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: elk stack部署自动化日志收集分析平台

流程说明


  • 应用APP生产日志,用来记录用户的操作
  • 通过Filebeat读取日志文件中的内容,并且将内容发送给Logstash,原因是需要对内容做处理
  • Logstash接收到内容后,进行处理,如分割操作,然后将内容发送到Elasticsearch中
  • Kibana会读取Elasticsearch中的数据,并且在Kibana中进行设计Dashboard,最后进行展示


Docker 部署 elk

先决条件

修改系统内存内核参数

vim /etc/sysctl.conf
vm.max_map_count=262144

运行内存要大于4G


pull + run

docker pull sebp/elk
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -itd --name elk sebp/elk

修改logstash配置文件

 1、进入elk容器
docker exec -it elk /bin/bash
 2、修改配置文件 改为如下
vi /etc/logstash/conf.d/02-beats-input.conf

这里的logstash接收到filebeat发来的日志,将message切割等数据处理操作,之后再将处理好的数据发送给elasticsearch

input {
        beats {
                port => "5044"
        }
}
filter {
        mutate {
                split => {"message"=>"|"}
        }
        mutate {
                add_field => {
                "userId" => "%{[message][1]}"
                "visit" => "%{[message][2]}"
                "date" => "%{[message][3]}"
                }
        }
        mutate {
                convert => {
                "userId" => "integer"
                "visit" => "string"
                "date" => "string"
                }
        }
}
output {
  elasticsearch {
    hosts => [ "192.168.135.10:9200"]
    index => ["logstash-wxf-demo-shopping"]
  }
}

仅保留02-beats-input.conf,别的要么改名要么删除,我这里是改名

root@6643ff42f735:/etc/logstash/conf.d# ls
02-beats-input.conf  10-syslog.conf.bak  11-nginx.conf.bak  30-output.conf.bak

退出容器

exit


开启服务

编写服务

我这里用go编写的一个程序模拟

package main
import (
  "fmt"
  "math/rand"
  "os"
  "strconv"
  "time"
)
func main() {
  for i := 0; i < 5; i++ {
    go LogCal()
    time.Sleep(time.Second)
  }
  select {}
}
func LogCal() {
  for {
    businessList := []string{"浏览页面", "评论商品", "加入收藏", "加入购物车", "提交订单", "使用优惠券", "领取优惠券", "搜索", "查看订单"}
    t := time.Now()
    rand.Seed(time.Now().UnixNano())
    userId := rand.Intn(9000000) + 1000000
    visit := businessList[rand.Intn(9)]
    date := fmt.Sprintf("%d-%d-%d %d:%d:%d", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
    time.Sleep(time.Second * time.Duration(rand.Intn(5)+5))
    result := "DAU|" + strconv.Itoa(userId) + "|" + visit + "|" + date + "\n"
    LogInfo(result)
  }
}
func LogInfo(result string) {
  t := time.Now()
  orderTime := fmt.Sprintf("%d-%d-%d %d:%d:%d", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
  pre := "[INFO] " + orderTime + " [Demo] - "
  result = pre + result
  filePath := "/usr/local/Demo/abc.log"
  file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0666)
  if err != nil {
    fmt.Printf("open file err=%v\n", err)
    return
  }
  defer file.Close()
  file.WriteString(result)
}

配置filebeat的yml文件

vi Demo.yml


填写如下内容,将收集到的日志发送给logstash

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/Demo/*.log
  fields:
    form: Demo-Shopping
  fields_under_root: true
setup.template.settings:
  index.number_of_shards: 1
  index.number_of_replica: 0
output.logstash:
  hosts: ["192.168.135.10:5044"]

运行顺序

docker restart elk
go run main.go
./filebeat -e -c Demo.yml


进入Elasticsearch-head查看数据

没有Elasticsearch-head去下载这个插件即可

可以看到我们想要的date,visit,userid都收集到了


进入Kibana创建数据看板

http://192.168.135.10:5601/

创建索引



创建柱形图

下面那个,上面的是饼图


选择数据源



创建饼图

选择数据源



右上角Save

创建数据表格


右上角Save

制作Dashboard仪表盘



最后保存即可

效果展示



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
100 6
|
2月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
12天前
|
存储 监控 安全
|
1月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
63 9
|
1月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
57 7
|
2月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
2月前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
168 1
使用装饰器实现自动化日志系统
使用装饰器实现自动化日志系统
|
3月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
3月前
|
监控 安全 Devops
DevOps实践:持续集成和部署的自动化之旅
【8月更文挑战第30天】在软件开发的快节奏世界中,DevOps已成为推动项目成功的关键因素。本文将深入探讨如何通过持续集成(CI)和持续部署(CD)实现自动化,以加速开发流程、提升软件质量并确保快速交付。我们将从基础概念出发,逐步过渡到实际操作,最后讨论如何克服实施过程中的挑战。