本文介绍: ELK:E:es存储数据索引型的数据库L:logstash收集日志然后按照标准化本事发送给ES(rubydebug格式)K:可视化工具。人性化的显示用户信息,方便用户检索查询。ELK:E:es存储数据索引型的数据库L:logstash收集日志然后按照标准化本事发送给ES(rubydebug格式)K:可视化工具。人性化的显示用户信息,方便用户检索查询

ELK的概论

elk一套完整的日志集中处理方案,有三个开源软件简称组成:
E:ElasticSearch ES是一个开源的,分布式存储索引擎(索引型的非关系型数据库),存储日志
java来发的,基于Lucene结构开发一套全文检索引擎,拥有一个web接口用户可以通过浏览器的形式和ES组件进行通信
作用:存储,可以允许全文搜索结构化搜索索引点)。索引可以支持大容量的日志数据可以支持不同类型文档

k:Kiabana图形化界面可以更好分析存储在ES上的日志数据。提供一个图形化界面,在浏览器ES上的数据汇总分析搜索
l:Logstash 数据收集引擎支持动态的(实时)从各种服务应用收集日志资源,还可以收集日志数据进行过滤分析、丰富。统一格式等等操作然后把数据同步到ES存储引擎
RUBY语言编写的,运行java虚拟机上的一个大数据处理工具。数据传输格式化处理格式化输出。主要用来处理日志
数据收集工具
fliebeat:轻量级的开源的,日志手机共计。收集的速度较快,但是没有数据分析过滤的能力,一般是结合logstash– 块使用
kafka
RabbitMQ中间件消息队列

总结

我们管理一个大的集群时,需要分析定位的日志会很多,每一台服务器分别去分析,将耗时耗力。
所以我们应运而生了一个集中的统-的日志管理分析系统。极大的提高定位问题的效率。
日志相同的特征
1、收集,可以收集基本上常用的软件日志。
2、传输,收集到的日志需要发送到ES上
3、存储,es复制存储数据
4、UI,图形化界面(kiabana)

ELK搭建实验

三台主机
es1 192.168.10.30
es2 192.168.10.40
logstash kiabana 192.168.10.50(4核8G)

实验开始:
关闭三台主机防火墙安全机制!
 
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: ["192.168.10.30:9300", "192.168.10.40: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: ["192.168.10.30:9300", "192.168.10.40: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
#日志
 
到浏览器查看一下
192.168.10.30:9200
192.168.10.40:9200
#是否可以查看http://192.168.10.30:9200/_cluster/health?pretty 
http://192.168.10.40: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内部通信的端口
 
到浏览器测试一下
192.168.10.30:9100
192.168.10.40:9100
#查看可视化界面是否正常
 
在可视化界面输入ip地址加上ip点击连接后面都是绿色表示实验成功

连接成功!

终端插入一条索引测试

终端插入一个索引进行测试
 
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
数据浏览,选择index查看是否可以查看到
 
查看概览:加粗的是主索引节点,没有加粗的是普通索引节点。相当于冗余和备份

到50主机开始收集日志
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=>["192.168.10.30:9200","192.168.10.40:9200"] } }' --path.data /opt/log
#--path.data /opt/log:目录可以不存在自动创建
 [Api webserver] agent Successfully started Logstash API
endpoint port=>96011
#查看到这条信息,表示已经创建成功了
输入两条信息测试一下

回到50主机
/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 => ["192.168.10.30:9200","192.168.10.40: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 => ["192.168.10.30:9200","192.168.10.40:9200"]
      index => "http_access-%{+YYYY.MM.dd}"
    }
    }
   if [type] == "error" {
    elasticsearch {
      hosts => ["192.168.10.30:9200","192.168.10.40: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自动的把输出格式定义统一标准格式输出。

总结

ELK:

E:es:存储数据,索引型的数据库

L:logstash:收集日志,然后按照标准化本事发送给ES(rubydebug格式

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

ELK:

E:es:存储数据,索引型的数据库

L:logstash:收集日志,然后按照标准化本事发送给ES(rubydebug格式)

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

原文地址:https://blog.csdn.net/qq_61843057/article/details/134652666

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12671.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注