ELK日志分析系统

发布时间:2023年12月25日

elk日志分析系统:

ELK是一套完整的日志集中处理方案,由三个开源的软件简称组成。

E:ElasticSearch ?ES是一个开源的,分布式的存储检索引擎(索引图的非关系数据库)。存储日志。

Java代码开发的,基于Lucene结构开发的一套全文检索引擎,拥有一个web接口。用户可以通过浏览器的形式和ES组件进行通信。

作用:存储,允许全文搜索,结构化搜索(索引点),索引点可以支持大容量的日志数据。也可以所有不同类型的文档。

k:Kibana 图形化界面。可以更好的分析存储在ES上的日志数据。提供了一个图形化的界面,来浏览ES上的日志数据。汇总分析、搜索。

l:Logstash 数据收集引擎,支持动态的(实时)从各种服务应用收集日志资源,还可以收集到日志数据进行过滤、分析,丰富,统一格式等等操作。然后把数据同步到es存储引擎。

RUBY语言编写的,运行在java虚拟机上的一个强大的数据处理工具。数据传输,格式化处理,格式化输出。主要用来处理日志。

数据收集工具:

fliebeat 轻量级的开源的,日志收集工具。收集的速度较快,但是没有数据分析和过滤的能力,一般是结合logstash一块使用。

kafka

RabbitMQ ?中间件消息队列

总结:ELK的作用,当我们管理一个大集群时,需要分析和定位的日志就会很多,每一台服务器分别去分析,将会耗时耗力。所以我们应运而生了一个集中的统一的日志管理和分析系统。极大的提高了定位问题的效率。

日志系统的特征:

  1. 收集,可以收集基本上市面上常用的软件日志
  2. 传输,收集到的日志需要发送到ES上
  3. 存储,es负责存储数据
  4. UI:图形化界面(kibana)

三台主机:

实验开始:

关闭三台主机的防火墙和安全机制!

java -version

yum -y install java

#安装依赖环境

es1和es2

两台主机都要安装elasticsearch

cd /opt

rpm -ivh elasticsearch

#两台主机都要安装elasticsearch

cd /etc/elasticsearch/

#修改配置文件elasticsearch.yml

cp elasticsearch.yml elasticsearch.yml.bak

#配置文件做一个备份

es1:

vim elasticsearch.yml

cluster.name: my-elk-cluster

node.name: node1

#node.name不能重复,两台主机要区分

node.master: ture

#是主就是ture

node.data: ture

#设置存储节点

33行

path.data:/opt/log

#设置存储位置

37行

path.log: /var

#日志存放路径

44行

bootstrap.memory_lock: ture

#禁止es使用交换分区

56行

network.host: 0.0.0.0

#监听所有网段

60行取消注释并添加一行

http.port: 9200

#对外提供访问的端口

transport.tcp.port: 9300

#es内部通信的端口

71行取消注释

discovery.zen.ping.unicast.hosts: ["20.0.0.20:9300", "20.0.0.30:9300"]

#指定集群的通信地址

es2:

vim elasticsearch.yml

cluster.name: my-elk-cluster

node.name: node2

#node.name不能重复,两台主机要区分

node.master: flase

#是主就是ture

node.data: ture

#设置存储节点

33行

path.data:/opt/log

#设置存储位置

37行

path.log: /var

#日志存放路径

44行注释

bootstrap.memory_lock: ture

#禁止es使用交换分区

56行

network.host: 0.0.0.0

#监听所有网段

60行取消注释并添加一行

http.port: 9200

#对外提供访问的端口

transport.tcp.port: 9300

#es内部通信的端口

71行取消注释

discovery.zen.ping.unicast.hosts: ["20.0.0.20:9300", "20.0.0.30:9300"]

#指定集群的通信地址

配置文件修改完成

grep -v "^#" /etc/elasticsearch/elasticsearch.yml

#检查配置文件是否有问题

systemctl restart elasticsearch

systemctl enable elasticsearch

#设置开机自启

netstat -antp | grep 9200

#查看端口是否启动,能查看到说明配置没

tail -f /var/log/elasticsearch/my-elk-cluster.log

#日志

到浏览器查看一下

20.0.0.20:9200

20.0.0.30:9200

#是否可以查看到

http://20.0.0.20:9200/_cluster/health?pretty

http://20.0.0.30:9200/_cluster/health?pretty

#查看集群健康状态

es1和es2

安装插件

cd /opt/

安装node依赖环境

yum install gcc gcc-c++ make -y

#安装依赖环境

tar zxvf node-v8.2.1.tar.gz

#解压node安装包

cd node-v8.2.1

./configure

#开始配置

make -j 2 && make install

图形化环境依赖环境安装完毕!

es1和es2

安装web插件

cd /opt

tar zxvf phantomjs-2.1.1-linux-x86_64

cd /opt/phantomjs-2.1.1-linux-x86_64/bin

cp phantomjs /usr/local/bin

#复制配置文件

安装可视化界面

elasticsearch-head-master

unzip

#解压

cd elasticsearch-head-master

npm install

#安装依赖包

npm install

es1和es2

vim /etc/elasticsearch/elasticsearch.yml

到最后一行

http.cors.enabled: true

#开启跨域访问支持

http.cors.allow-origin: "*"

#开启跨域访问之后,允许访问的域名地址。*表示所有地址。

systemctl restart elasticsearch.service

netstat -antp | grep 9200

#查看端口是否起来

还是在这个目录

npm run start &

#后台启动。如果启动了报错500,可以再次使用这个命令重新启动

netstart -antp | grep 9100

#查看可视化界面端口是否起来

#9100是可视化工具的访问端口

#9200还是ES数据库的访问端口

#9300ES内部通信的端口

到浏览器测试一下

20.0.0.20:9100

20.0.0.30:9100

#查看可视化界面是否正常

在可视化界面输入ip地址加上ip点击连接后面都是绿色表示实验成功

Elk:

Es:存储过程,索引型的数据库

logstash:收集日志,然后按照标准化格式发送给ES(RUBYDEBUG的格式)

K:可视化工具。更人性化的显示用户信息,方便用户检索查询

在终端插入一个索引进行测试

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

数据浏览,选择index查看是否可以查看到

查看概览:加粗的是主索引节点,没有加粗的是普通索引节点。相当于冗余和备份。

到10主机开始收集日志

yum -y install java

#安装依赖环境

java -version

cd /opt

rpm -ivh logstash

#安装logstash

systemctl restart logstash

#重启服务

systemctl enable logstash

#设置开机自启

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

#创建软连接

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

#所有的键盘命令行输出转化为标准输(rubydebug的模式),6.0之后,默认的输出格式就是rubydebug的模式。

ctrl z停止

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.20:9200","20.0.0.30:9200"] } }' --path.data /opt/log

#--path.data /opt/log:目录可以不存在会自动创建

?[Api webserver] agent Successfully started Logstash API

endpoint port=>96011

#查看到这条信息,表示已经创建成功了

输入两条信息测试一下

回到10主机

/etc/logstash/conf.d

#默认路径

mkdir /opt/test1

vim system.conf

input {

?file {

??path =>"/var/log/messages"

??#指定收集日志文件的位置

??type =>"system"

??start_position =>"beginning"

??#收集日志的启动位置.beginning:从头开始向下收集

?}

}

output {

?elasticsearch {

??hosts => ["20.0.0.20:9200","20.0.0.30:9200"]

??#指定发送的实例ip和端口

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

??#数据索引的名称%{+YYYY.MM.dd}:当前创建的日期

?}

}

logstash -f system.conf --path.data /opt/yy

#启动配置文件

显示success表示成功

到浏览器查看一下是否生成索引节点再到kibana上查看一下

管理---索引模式---创建索引模式

输入system-*

next

选择自动筛选

点击创建索引模式

回到Discover就可以查看到当前日志所有内容

如果日志文件发生以下报错:

Nov 27 12:05:56 test1 logstash: 2023-11-27T12:05:56 354/logstash.config.sourceloader) No configuration found in the configured

sources.

回到10主机修改配置文件

cd /etc/logstash

vim logstash.yml

解除注释

path.config: /opt/log

#指定文件位置

systemctl restart logstash

#重启服务

chmod 777 messages

#给messages所有权限

yum -y install httpd

#安装httpd服务测试一下看看kibana是否可用查看到

此时日志同步已经完成!

添加httpd服务到kibana

chmod 777 access_log error_log

#给httpd日志权限

mkdir /opt/http1

vim http.conf

input {

?file{

???path =>"/etc/httpd/logs/access_log"

???#日志文件路径

???type =>"access"

???start_position =>"beginning"

??}

?file{

????path =>"etc/httpd/logs/error_log"

???#日志文件路径

???type =>"error"

???start_position =>"beginning"

?}

}

output {

??if [type] == "access" {

????elasticsearch {

??????hosts => ["20.0.0.20:9300","20.0.0.30:9300"]

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

????}

????}

???if [type] == "error" {

????elasticsearch {

??????hosts => ["20.0.0.20:9200","20.0.0.30:9200"]

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

????}

??}

}

logstash -f httpd.conf --path.data /opt/test2 &

#启动配置文件。后台运行

再开1台10

vim /var/www/html/index.html

this is httpd

到浏览器访问一下20.0.0.10的httpd服务

到logstash和kibana查看一下看是否可用查看到

到kibana的管理,创建索引模式,httpd_access*直接创建即可

添加完成后,查看一下httpd是否可以查看到日志更新即可

实验完成!

如何实现过滤

kibana可以自动实现过滤

可以添加可用字段查看日志

不再需要再配置文件中加入字段了

需要移除字段,直接点移除即可

自动刷新功能:可选择刷新间隔。生产中一般

时间戳:选择绝对展示这一天内所有数据信息

es的性能调优

vim /etc/security/limits.conf

#修改最大打开文件数

* soft nofile 65536

#打开最大文件数软限制

* hard nofile 65536

#打开最大文件数硬限制

* soft nproc 32000

#打开最大进程软限制

* hard nproc 32000

#打开最大进程硬限制

* soft memlock unlimited

#是否对内存使用量软限制unlimited:不做限制

* hard memlock unlimited

#是否对内存使用量硬限制unlimited:不做限制

重启生效

vim /etc/systemd/system.conf

#对内核文件进行优化

在最后一行插入

DefaultLimitNOFILE=65536

#一个用户会话的末日最大文件描述符的限制量

#文件描述符:用于标识打开文件或者I/O资源限制的整数

DefaultLimitNPROC=32000

#一个用户可以打开的最大进程数量的限制 32000个,一个用户的终端可以运行多少个进程

DefaultLimitMEMLOCK=infinity

#一个用户的终端,默认锁定内存的限制。infinity:不做限制

#这个限制需要重启生效

内核优化

ES是基于lucene架构,实现的一款索引型数据库。lucene可以利用操作系统的内存来缓存ES的索引数据。提供更快的查询速度。在工作中我们会把系统的一般内存留给lucene。

部署es通用规则

如果机器内存小于64G。那么50%给ES。50%给操作系统,让操作系统内存给lucene架构缓存数据

如果机器内存大于64G。那么ES分配4-32G即可,其他的都给操作系统,供lucene架构缓存数据

vim /etc/sysctl.conf

#修改内核文件

vm.max map_count=262144

#一个进程可以拥有的最大内存映射区参数

#内存映射:将文件或者其他设备映射到进程地址空间的方法。允许进程直接读取或写入文件,无需常规的I/O方式。映射空间越大,ES和lucene的速度越快。

sysctl -p

#立即生效

映射关系:

2g/262144

4g/4194304

8g/8388608

Logstash的命令常用选项

logstash -f:指定配置文件,根据配置文件识别输入和输出流

logstash -e:一般用于测试,从命令行当中获取输入,然后经过logstash加工之后,形成一个标准输出

logstash -t:检测配置文件是否正确,然后退出

logstash -e 'input { stdin{} } output { stdout{elasticsearch { hosts=>["20.0.0.20:9200","20.0.0.30:9300"]} }' --path.data /opt/log

#区分不同的数据存放目录

#6.0之后logstash自带的输出格式rubydebug,自动的把输出格式,定义为统一的标准格式输出。

文章来源:https://blog.csdn.net/DDYYmmm/article/details/135181667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。