ELK日志收集系统

一,概述

ELK由三个组件构成

作用:日志收集 日志分析 日志可视化

二,组件

1,elasticsearch

日志分析

开源的日志收集、分析、存储程序

特点

分布式

零配置

自动发现

索引自动分片

索引副本机制

Restful风格接口

多数据源

自动搜索负载

2,logstash

2.1 日志收集

2.2 搜集、分析、过滤日志的工具

2.3 工作过程

一般工作方式为c/s架构,Client端安装在需要收集日志的服务器上,Server端负责将收到的各节点日志进行过滤、修改等操作,再一并发往Elasticsearch上去

Inputs → Filters → Outputs

输入-->过滤-->输出

2.4 INPUT

  File:从文件系统的文件中读取,类似于tail -f命令

  Syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析

  Redis:从redis service中读取

  Beats:从filebeat中读取

2.5 FILETER

Grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。

  官方提供的grok表达式:logstash-patterns-core/patterns at main · logstash-plugins/logstash-patterns-core · GitHub

  Grok在线调试:Grok Debugger

  Mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。

  Drop:丢弃一部分Events不进行处理。

  Clone:拷贝Event,这个过程中也可以添加或移除字段。

  Geoip:添加地理信息(为前台kibana图形化展示使用)

2.6 OUTPUTS

  Elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

  File:将Event数据保存到文件中。

  Graphite:将Event数据发送到图形化组件中,踏实一个当前较流行的开源存储图形化展示的组件。

了解

三,配置ELK日志收集系统

设置各个主机的IP地址为拓扑中的静态IP,在两个节点中修改主机名为node1和node2并设置hosts文件

node1:

hostnamectl set-hostname node1

vim /etc/hosts

192.168.115.3 node1

192.168.115.4 node2

node2:

hostnamectl set-hostname node2

vim /etc/hosts

192.168.115.3 node1

192.168.115.4 node2

三、 安装node1与node2节点的elasticsearch

点解分别安装java环境:

yum install -y java-1.8.0-openjdk

  1. 安装

mv elk软件包 elk

cd elk

rpm -ivh elasticsearch-5.5.0.rpm

  1. 配置

node1:

vim /etc/elasticsearch/elasticsearch.yml

cluster.name:my-elk-cluster //集群名称

node.name:node1 //节点名字

path.data:/var/lib/elasticsearch //数据存放路径

path.logs: /var/log/elasticsearch/ //日志存放路径

bootstrap.memory_lock:false //在启动的时候不锁定内存

network.host:0.0.0.0 //提供服务绑定的IP地址,0.0.0.0代表所有地址

http.port:9200 //侦听端口为9200

discovery.zen.ping.unicast.hosts:【"node1","node2"】 //群集发现通过单播实现

node2节点安装

scp把配置文件传到node2节点

更改节点名称

配置完成保存退出重启服务并查看

网页测试

  1. 查看集群健康状态:

http://192.168.115.3:9200/_cluster/health

在node1安装elasticsearch-head插件

cd elk

tar xf node-v8.2.1.tar.gz

cd node-v8.2.1

./configure && make -j4 && make install

拷贝命令

cd elk

tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2

cd phantomjs-2.1.1-linux-x86_64/bin

cp phantomjs /usr/local/bin

安装elasticsearch-head

cd elk

tar xf elasticsearch-head.tar.gz

cd elasticsearch-head

npm install

修改elasticsearch配置文件

vim /etc/elasticsearch/elasticsearch.yml

Require explicit names when deleting indices:

#action.destructive_requires_name:true

http.cors.enabled: true //开启跨域访问支持,默认为false

http.cors.allow-origin: "*" //跨域访问允许的域名地址

重启服务: systemctl restart elasticsearch

启动elasticsearch-head

cd /root/elk/elasticsearch-head

npm run start &

查看监听: netstat -anput | grep :9100

访问:

http://192.168.115.3:9100

测试

在node1的终端中输入:

curl -XPUT 'http://192.168.115.3:9200/index-demo/test/1?pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

刷新浏览器可以看到对应信息即可

node1服务器安装logstash

cd elk

rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

测试1: 标准输入与输出

logstash -e 'input{ stdin{} }output { stdout{} }'

测试2: 使用rubydebug解码

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug }}'

测试3:输出到elasticsearch

logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>"192.168.115.3:9200"} }'

查看结果:

http://192.168.115.3:9100

若看不到,请刷新!!!

  • logstash日志收集文件格式(默认存储在/etc/logstash/conf.d)

Logstash配置文件基本由三部分组成:input、output以及 filter(根据需要)。标准的配置文件格式如下:

input (...) 输入

filter {...} 过滤

output {...} 输出

在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:

input {

file{path =>"/var/log/messages" type =>"syslog"}

file { path =>"/var/log/apache/access.log" type =>"apache"}

}

案例:通过logstash收集系统信息日志

chmod o+r /var/log/messages

vim /etc/logstash/conf.d/system.conf【自定义】

input {

file{

path =>"/var/log/messages"

type => "system"

start_position => "beginning"

}

}

output {

elasticsearch{

hosts =>"192.168.1.1:9200"

index => "system-%{+YYYY.MM.dd}"

}

}

重启日志服务: systemctl restart logstash

查看日志: http://192.168.114.3:9100​​​​​​

node1节点安装kibana

cd elk

rpm -ivh kibana-5.5.1-x86_64.rpm

配置kibana

vim /etc/kibana/kibana.yml

server.port:5601 //Kibana打开的端口

server.host:"0.0.0.0" //Kibana侦听的地址

elasticsearch.url: "http://192.168.115.3:9200"

//和Elasticsearch 建立连接

kibana.index:".kibana" //在Elasticsearch中添加.kibana索引

启动kibana

systemctl start kibana

访问kibana :

http://192.168.115.3:5601

首次访问需要添加索引,我们添加前面已经添加过的索引:system-*

企业案例:

收集httpd访问日志信息

在httpd服务器上安装logstash,参数上述安装过程,可以不进行测试

logstash在httpd服务器上作为agent(代理),不需要启动

编写httpd日志收集配置文件

vim /etc/logstash/conf.d/httpd.conf

input {

file{

path=>"/var/log/httpd/access_log" //收集Apache访问日志

type => "access" //类型指定为 access

start_position => "beginning" //从开始处收集

}

output{

elasticsearch {

hosts =>"192.168.115.3:9200" // elasticsearch 监听地址及端口

index =>"httpd_access-%{+YYYY.MM.dd}" //指定索引格式

}

}

使用logstash命令导入配置:

logstash -f /etc/logstash/conf.d/httpd.conf

使用kibana查看即可! http://192.168.115.3:5601 查看时在mangement选项卡创建索引httpd_access-* 即可!

相关推荐
未若君雅裁4 天前
日志采集与ELK:从本地日志到集中检索分析
运维·elk·jenkins
_codemonster4 天前
Prometheus + Grafana + Alertmanager和ELK 栈(Elasticsearch + Logstash + Kibana)
elk·grafana·prometheus
Sean‘5 天前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Michaelwubo8 天前
ELK案例
elk
YDS8299 天前
DeepSeek RAG&MCP + Agent智能体项目 —— 集成ELK日志管理系统和Prometheus监控系统
java·elk·ai·springboot·agent·prometheus·deepseek
爱吃龙利鱼11 天前
docker-compose一键部署ELK+Filbeat
elk·docker
小旭952713 天前
Spring Cloud 集成分布式日志 ELK+Swagger 接口文档实战
java·分布式·后端·elk·spring cloud
绝知此事17 天前
ELK 从入门到精通:Spring Boot 实战三部曲(三)—— 高级应用与架构设计
spring boot·后端·elk
绝知此事18 天前
ELK 从入门到精通:Spring Boot 实战三部曲(二)—— 进阶特性与性能优化
spring boot·elk·性能优化
绝知此事18 天前
ELK 从入门到精通:Spring Boot 实战三部曲(一)—— 基础核心与快速上手
spring boot·后端·elk