linux————ELK(日志收集系统集群)

目录

一、为什么要使用ELK

二、ELK作用

二、组件

一、elasticsearch

特点

二、logstash

工作过程

INPUT(输入)

FILETER(过滤)

OUTPUTS(输出)

三、kibana

三、架构类型

ELK

ELKK

ELFK

ELFKK

EFK

四、构建ELk集群

一、环境配置

二、安装node1与node2节点的elasticsearch

三、在node1安装elasticsearch-head插件

四、node1服务器安装logstash

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

六、node1节点安装kibana


一、为什么要使用ELK

日志对于分析系统、应用的状态十分重要,但一般日志的量会比较大,并且比较分散。

如果管理的服务器或者程序比较少的情况我们还可以逐一登录到各个服务器去查看、分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。目前比较有名成熟的有,Splunk(商业)、FaceBook 的Scribe、Apache的Chukwa Cloudera的Fluentd、还有ELK等等。

二、ELK作用

日志收集

日志分析

日志可视化

二、组件

一、elasticsearch

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

特点

分布式

零配置

自动发现

索引自动分片

索引副本机制

Restful风格接口

多数据源

自动搜索负载

二、logstash

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

工作过程

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

Inputs → Filters → Outputs

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

INPUT(输入)

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

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

Redis: 从redis service中读取

Beats: 从filebeat中读取

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图形化展示使用)

OUTPUTS(输出)

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

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

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

三、kibana

日志可视化

为Logstash和ElasticSearch在收集、存储的日志基础上进行分析时友好的Web界面,可以帮助汇总、分析和搜索重要数据日志。

三、架构类型

ELK

es

logstash

kibana

ELKK

es

logstash

kafka

kibana

ELFK

es

logstash 重量级 占用系统资源较多

filebeat 轻量级 占用系统资源较少

kibana

ELFKK

es

logstash

filebeat

kafka

kibana

EFK

es

logstash

fluentd

kafka

kibana

四、构建ELk集群

基于Java环境yum install -y java-1.8.0-OpenJDK)

虚拟机 内存4G 四核

已经下载好的 tar包

一、环境配置

关闭防火墙,selinux

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

node1:192.168.100.10/24

hostnamectl set-hostname node1

vim /etc/hosts

192.168.1.1 node1

192.168.1.2 node2

node2:192.168.100.11/24

hostnamectl set-hostname node2

vim /etc/hosts

192.168.1.1 node1

192.168.1.2 node2

二、安装node1与node2节点的elasticsearch

安装 rpm -ivh elasticsearch-5.5.0.rpm

配置 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:

vim /etc/elasticsearch/elasticsearch.yml

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

node.name:node2 //节点名字

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"】 //群集发现通过单播实现

启动elasticsearch服务

node1和node2

systemctl start elasticsearch

查看节点信息

192.168.100.10:9200

192.168.100.11:9200

三、在node1安装elasticsearch-head插件

安装node

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(npm 由node包生成)

修改elasticsearch配置文件

vim /etc/elasticsearch/elasticsearch.yml

#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

访问: 192.168.100.10:9100

测试

在node1的终端中输入:

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&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

In -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.1.1:9200"]} }'

查看结果:192.168.100.10: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.100.10:9200"]

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

}

}

重启日志服务: systemctl restart logstash

查看日志: 192.168.100.10: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.8.134:9200"

//和Elasticsearch 建立连接

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

启动kibana

systemctl start kibana

访问kibana : 192.168.100.10:5601

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

相关推荐
颇有几分姿色1 分钟前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev18 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank31 分钟前
mac crontab 不能使用问题简记
linux·运维·macos
筱源源1 小时前
Kafka-linux环境部署
linux·kafka
成都古河云1 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
算法与编程之美1 小时前
文件的写入与读取
linux·运维·服务器
xianwu5432 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming2 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
心灵彼岸-诗和远方2 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
JuiceFS3 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生