log-collect-ai-analytics
介绍
PB级日志收集智能分析系统-LCA
- 快速部署:部署丝滑,管理方便,有web后台管理。
- 高效的数据采集:LCA 支持多种数据源,无论是服务器日志、应用日志还是网络设备日志,都能一键配置,快速部署。
- 灵活的数据处理:比起传统的elk更加灵活,而且还集成了日志分析和告警,内置强大的数据处理功能,包括过滤、聚合、关联等,让您轻松应对复杂的数据处理需求,除了按配置好的目录收集日志还提供了api接口实时调用,吞吐率高。
- 直观的数据可视化:通过丰富的图表和仪表板,LCA 让数据分析变得更加简单直观,让您一目了然地了解业务状况。
- 智能告警机制:实时监控关键指标,一旦发现异常立即触发告警,确保问题第一时间得到解决。
- 安全可靠:web管理后台访问控制策略,保障您的数据安全无忧。
git地址:日志收集智能分析系统-LCA
软件架构
通过在运维平台上配置日志收集项,或者通过api接口调用推送日志,logagent从etcd中获取要收集的日志信息从业务服务器读取日志信息,发往kafka,logtransfer负责从kafka读取日志,写入到Elasticsearch中,通过Kibana进行日志检索。loganalysis将安装规则分析日志,将告警,报错日志信息推给企业微信。
- 可实时收集常用的软件的日志,比如nginx,项目系统,当每次添加一个需要收集的日志文件时可以实时进行收集,还可以实时收集指定目录下所有按时间切分的日志例如:/logs/2024-07-01.log,/admin/lum-2024-07-02.log
- 可以通过api调用主动推送日志到日志分析系统(需要支持5000RPS/S)
- 可以对收集的日志进行分析,智能分析,然后按规则告警(nginx状态不是200,php文件报错)
- 实现如阿里sls一般查询日志
安装教程
etcd安装
Etcd 安装配置
etcd 是一个分布式、高可用的一致性键值存储系统,提供可靠的分布式键值存储、配置共享和服务发现等功能。
etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。
etcd 安装配置都非常简单,可以安装在大多数主流平台,比如 Linux、Windows、MacOS等。
1. Linux 安装 etcd
Linux 安装 etcd 有三种方式:yum安装、二进制安装和源码安装。
1.1 yum 安装
在 shell 中执行安装命令。
yum -y install etcd
执行结果:
Downloading packages:
etcd-3.3.11-2.el7.centos.x86_64.rpm | 10 MB 00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : etcd-3.3.11-2.el7.centos.x86_64 1/1
验证中 : etcd-3.3.11-2.el7.centos.x86_64 1/1
已安装:
etcd.x86_64 0:3.3.11-2.el7.centos
完毕!
可执行文件 etcd 和 管理工具 etcdctl 均被安装在 /usr/bin 下。
配置文件位于 /etc/etcd/etcd.conf,我们可以使用 vi 进行编辑。
默认的工作目录位于 /var/lib/etcd。
设置 etcd 为系统服务:
$ systemctl enable etcd
启动运行 etcd:
$ systemctl start etcd
1.2 二进制安装
到 etcd 的 github 地址,下载二进制安装包。
etcd 下载地址:https://github.com/etcd-io/etcd/releases/。
以 etcd3.3.1 为例:
wget https://github.com/etcd-io/etcd/releases/download/v3.3.1/etcd-v3.3.1-linux-amd64.tar.gz
如果 github 速度慢,可以使用华为镜像, 下载地址:https://mirrors.huaweicloud.com/etcd/。
wget https://mirrors.huaweicloud.com/etcd/v3.3.1/etcd-v3.3.1-linux-amd64.tar.gz
tar 包解压后,里面包含可执行文件 etcd 和 管理工具 etcdctl :
tar zxvf etcd-v3.3.1-linux-amd64.tar.gz
将 etcd、etcdctl 复制到 /usr/bin 下。然后创建工作目录,编写配置文件 etcd.conf.yaml。
mkdir /var/lib/etcd
cd /var/lib/etcd
vi etcd.conf.yaml
例如配置文件内容如下:
name: "etcd-node"
data-dir: "/var/lib/etcd"
listen-peer-urls: "http://0.0.0.0:2380"
listen-client-urls: "http://0.0.0.0:2379"
advertise-client-urls: "http://127.0.0.1:2379"
启动运行 etcd:
$ nohup etcd --config-file=/var/lib/etcd/etcd.conf.yaml &
1.3 测试验证
查看版本:
etcdctl version
Elasticsearch安装
Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
Elasticsearch是一个分布式、可扩展、近实时的高性能搜索与数据分析引擎。Elasticsearch基于Apache Lucene构建,采用Java编写,并使用Lucene构建索引、提供搜索功能。Elasticsearch的目标是让全文搜索功能的落地变得简单。
使用 docker-compose 构建es集群环境
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- esnet
volumes:
esdata01:
esdata02:
networks:
esnet:
driver: bridge
Kafka安装
kafka是一款分布式的基于发布/订阅模式的消息队列,是目前比较主流的消息中间件。
version: "3"
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
hostname: kafka
ports:
- "19004:19004"
- "9092:9092"
environment:
TZ: CST-8
KAFKA_BROKER_ID: 3
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:19004
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://120.79.5.112:19004
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
links:
- zookeeper
部署logAgent
mkdir -p /opt/go_build/log-analysis/logAgent
cd /opt/go_build/log-analysis/logAgent
vim /opt/go_build/log-analysis/logAgent/etc/config.ini
[center]
address = 172.19.12.60:80
[kafka]
address = 172.19.12.60:9092
chan_max_size=100000
[etcd]
address = 172.19.12.60:2379
timeout = 5
collect_log_key = /logagent/%s/collect # 收集的日志的key
[log]
filePath = /opt/go_build/log-analysis/logAgent/logs
filename = logagent
# 日志级别 trace,debug,info,warning,error,fatal,panic
loglevel = info,warning,error,fatal,panic
# 最长保存多少天
max_age = 7
部署logTransfer
mkdir -p /opt/go_build/log-analysis/logTransfer
cd /opt/go_build/log-analysis/logTransfer
vim /opt/go_build/log-analysis/logTransfer/etc/config.ini
[kafka]
address = 172.19.12.60:9092
topic = ai_nginx,ai_api
group = logCollect
[es]
address = 172.19.12.60:9200
max_chan_size = 100000
nums = 16
[log]
filePath = /opt/go_build/log-analysis/logTransfer/logs
filename = logtransfer
# 日志级别 trace,debug,info,warning,error,fatal,panic
loglevel = info,warning,error,fatal,panic
# 最长保存多少天
max_age = 7
部署api
vim /opt/go_build/log-analysis/api/etc/config.ini
[center]
address = 172.19.12.60:80
[kafka]
address = 172.19.12.60:9092
chan_max_size=100000
[etcd]
address = 172.19.12.60:2379
timeout = 5
collect_log_key = /logagent/%s/collect # 收集的日志的key
[log]
filePath = /opt/go_build/log-analysis/api/logs
filename = api
# 日志级别 trace,debug,info,warning,error,fatal,panic
loglevel = info,warning,error,fatal,panic
# 最长保存多少天
max_age = 7
部署analysis
vim /opt/go_build/log-analysis/analysis/etc/config.ini
[center]
address = 172.19.12.60:80
[kafka]
address = 172.19.12.60:9092
chan_max_size=100000
[etcd]
address = 172.19.12.60:2379
timeout = 5
collect_log_key = /logagent/%s/collect # 收集的日志的key
[log]
filePath = /opt/go_build/log-analysis/analysis/logs
filename = logagent
# 日志级别 trace,debug,info,warning,error,fatal,panic
loglevel = info,warning,error,fatal,panic
# 最长保存多少天
max_age = 7
[es]
address = 172.19.12.60:9200
max_chan_size = 100000
nums = 16
index = ai_api,ai_nginx
[redis]
host = 127.0.0.1
port = 6379
pwd =
[wechat]
qyurl = https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=0601b729-3f92-4486-8230-bb572fda3075
部署logmanager
vim /opt/go_build/log-analysis/logmanager/conf/app.conf
# 服务器基础配置
# 应用程序名称
appname = logManager
# 服务端口
httpport = 8083
# 运行模式 dev/prod
runmode = prod
# 是否启用session
sessionon = true
# mysql相关配置信息
mysql_host = 172.19.12.60
mysql_port = 3306
mysql_user = logmanager
mysql_pass = LPY5mjjTB4iEAP6E
mysql_db = logmanager
# redis相关配置
redis_host = 172.19.12.60
redis_port = 6379
redis_db = 0
redis_password =
# etcd相关配置
etcd_host = 172.19.12.60
etcd_port = 2379
#kibana
kibana_host = 172.19.12.60:5601
使用说明
- 日志收集
通过把需要收集的日志文件或者日志文件通配符配置到etcd,logAgent会实时自动收集好需要收集的日志。
[
{“path”:“/data/wwwlogs/preapi_maxengine_cn_access_nginx.log”,“topic”:“ai_nginx”},
{“path”:“/data/wwwroot/maxengine/storage/logs/lumen-Y-M-D.log”,“topic”:“ai_api”}
] - api调用
通过调用 http://msgapi.c4eee.cn/send 这个接口可以实时把日志写入分析系统当中
事例:curl -X POST “http://msgapi.c4eee.cn/send” -H “Content-Type: application/x-www-form-urlencoded” -d “topic=ai_api&data=你的日志内容”
- 登录
演示地址 服务器配置2核4G 轻量应用 大家手下留情拜托🙏🏻
http://manage.c4eee.cn/
账号:admin
密码:admin
2. 配置收集
-
分析查询
-
告警
必读系列
备注
下载好安装程序,按照文档部署好,即可使用了,如遇问题可留言评论,我会解答,也可直接联系我。