ELK是Elasticsearch、Logstash、Kibana的简称,是近乎完美的开源实时日志分析平台。这三者是日志分析平台的核心组件,而并非全部。
组件:elasticsearch(对格式化后的数据进行索引和存储):
是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
具有分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等特点
logstash(将日志格式化):
它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。
它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
kibana(前端数据的展示):
是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。
它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据,Kibana 可以为 Logstash 和 Elasticsearch 提供友好的日志分析 web 界面,可以帮助你汇总、分析和搜索重要数据日志
elasticsearch-head(显示ES集群分片情况和数据查询浏览等):
elasticsearch-head将是一款专门针对于elasticsearch的客户端工具
elasticsearch搭建环境准备
Linux version 3.10.0-1062.el7.x86_64
Red Hat 4.8.5-36
JDK1.8
es不能用root用户
可以用docker安装可以创建ES用户(本文选择了这个)
#创建用户 useradd elastic #设置密码 passwd elastic
创建/export/sever目录
mkdir -p /export/server/es
给目录权限–(注意涉及到es相关的文件目录最好都给elastic权限)
chown -R elastic:elastic /export/server/es
配置elastic用户的sudo权限
visudo #100行左右添加: elastic ALL=(ALL) NOPASSWD: ALL
使用elastic用户使用管理员命令时要加上sudo
修改资源配置
sudo vi /etc/security/limits.conf #在文件的末尾添加以下内容,*号不能去掉 * soft nofile 65536 * hard nofile 131072 * soft nproc 4096 * hard nproc 4096
sudo sed -i '/^#DefaultLimitNOFILE=/aDefaultLimitNOFILE=4096' /etc/systemd/system.conf sudo sed -i '/^#DefaultLimitNPROC=/aDefaultLimitNPROC=4096' /etc/systemd/system.conf
#临时设置 sudo sysctl -w vm.max_map_count=262144 #永久设置 sudo vim /etc/sysctl.d/99-sysctl.conf #添加这一行 vm.max_map_count=262144 #检查是否成功 sudo sysctl -a | grep "vm.max_map_count"
如果使用了远程连接(例如:SecureCRT)这时需要断开重连 ES的安装
下载elastic search:https://elasticsearch.cn/download/ 选择想要安装的版本
cd ~ #上传到机器elastic用户下 (需要安装lrzsz包) rz #解压(这里使用的是6.0.0版本,可以选择其他版本,注意确保所有安装的组件和插件版本要一致) tar -zxvf elasticsearch-6.0.0-linux-x86_64.tar.gz -C /export/server/es/
修改核心配置文件
cd /export/server/es/elasticsearch-7.6.1/ vim config/elasticsearch.yml
cluster.name: es-cluster node.name: es-node1 path.data: /export/server/es/elasticsearch-6.0.0/datas path.logs: /export/server/es/elasticsearch-6.0.0/logs network.host: node1 http.port: 9200 #多台机器的话可以配置多台 discovery.zen.ping.unicast.hosts: ["node1"] #linux安装es的一个bug解决的配置 bootstrap.system_call_filter: false bootstrap.memory_lock: false #是否支持跨域 http.cors.enabled: true #*表示支持所有域名 http.cors.allow-origin: "*"
修改JVM配置文件
vim config/jvm.options
#22-23行 -Xms256m -Xmx256m
启动es
cd /export/server/es/elasticsearch-6.0.0/bin #直接启动 ./elasticsearch #后台启动 ./elasticsearch >> /dev/null &
在web端登录查看(注意需要在windows本地配置映射)
node1:9200 #显示基本信息就配置成功es-head安装
es-head需要依赖node环境,需要安装node js
https://nodejs.org/en/download/ tar -zxvf node-v16.13.1-linux-x64.tar.xz -C /export/server/es
修改环境变量
sudo vim /etc/profile
export NODE_HOME=/export/server/es/node-v16.13.1-linux-x64 export PATH=:$PATH:$NODE_HOME/bin
#刷新环境变量 source /etc/profile
检查是否安装成功
node -v npm -v
下载es-head
https://github.com/mobz/elasticsearch-head
解压
rz tar -zxvf elasticsearch-head-compile-after.tar.gz -C /export/server/es/
修改配置文件
修改Gruntfile.js
cd /export/server/es/elasticsearch-head vim Gruntfile.js
#93行 hostname:'node1'
修改app.js
cd /export/server/es/elasticsearch-head/_site vim app.js
#4354行 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://node1:9200";
启动es-head
cd /export/server/es/elasticsearch-head/node_modules/grunt/bin #直接启动 ./grunt server #后台启动 ./grunt server >> /dev/null & #查看进程 netstat -atunlp | grep 9100
访问 http://node1:9100/ kibana安装
下载 https://elasticsearch.cn/download/ (注意版本)上传解压修改配置
cd /export/server/es/kibana-6.0.0-linux-x86_64/ vim config/kibana.yml
# 7行:Kibana服务地址 server.host: "node1" # 25行:修改显示名称 server.name: "es-kibana" # 28行:修改es地址 elasticsearch.hosts: ["http://node1:9200"]
启动
cd /export/server/es/kibana-6.0.0-linux-x86_64 #直接启动 bin/kibana #后台启动 bin/kibana >> /dev/null &
查看进程
ps -ef | grep 5601
web登录
node1:5601
注意:如果端口号被占用请用下面代码
lsof -i:5601 kill -9 pidlogstash安装
下载 https://elasticsearch.cn/download/ (注意版本)
上传
解压
测试(因为我们要对log4js的日志要通过tcp或者udp放到es中,所以指定文件要这样写)
vim tcp_udp.json
(注意:如果不熟悉可以提前去网上找几个测试的例子跑一下看看效果)
#input与output中间可以加filter用于对input的数据格式进行解析 input { stdin { } udp { host => "0.0.0.0" # 从5050端口获取日志 port => 5050 type => "udp" } tcp { mode => "server" host => "0.0.0.0" # 从5050端口取日志 port => 5050 codec => json_lines type => "tcp" } } output { stdout { codec => rubydebug } if [type] == "udp" { elasticsearch { hosts => ["192.168.88.100:9200"] index => "logstash-udp-%{+YYYY.MM.dd}" } } if [type] == "tcp" { elasticsearch { hosts => ["192.168.88.100:9200"] index => "logstash-tcp-%{+YYYY.MM.dd}" } } }
启动logstash
cd /export/server/logstash-6.0.0/bin #直接启动 ./logstash -f ../testFile/tcp_udp.json (json文件的路径)
配置
可以去…/config/logstash.yml文件中将端口号和ip配置打开,然后在web端查看logstash启动信息 log4js配置
log4js.json
{ "appenders": { "access": { "type": "dateFile", "filename": "./logs/access.log", "pattern": "-yyyy-MM-dd" }, "dependencies": { "body-parser": "1.19.1", "compression": "1.7.4", "cookie-parser": "1.4.6", "ejs": "3.1.6", "express": "4.17.2", "forever": "4.0.1", "http-proxy-middleware": "2.0.1", "log4js": "6.3.0", "log4js-logstash-tcp": "2.0.3", "serve-favicon": "2.5.0" }, "rule-console": { "type": "console" }, "rule-file": { "type": "dateFile", "filename": "./logs/server-", "encoding": "utf-8", "maxLogSize": 10000000, "numBackups": 3, "pattern": "yyyy-MM-dd.log", "alwaysIncludePattern": true }, "rule-error": { "type": "dateFile", "filename": "./logs/error-", "encoding": "utf-8", "maxLogSize": 1000000, "numBackups": 3, "pattern": "yyyy-MM-dd.log", "alwaysIncludePattern": true } }, "categories": { "default": { "appenders": [ "rule-console", "rule-file", "rule-error" ], "level": "debug" }, "http": { "appenders": [ "access" ], "level": "info" } } }
udp.js
var log4js = require('log4js'); log4js.configure( { appenders: { logstash: { type: '@log4js-node/logstashudp', host: '192.168.88.100', port: 5050 } }, categories: { default: {appenders: ['logstash'], level: 'all'} } }) const logger = log4js.getLogger('测试数据'); logger.error("important log message", {cheese: 'gouda', biscuits: 'hobnob'}); logger.warn("important log message", {cheese: 'gouda', biscuits: 'hobnob'}); logger.info("important log message", {cheese: 'gouda', biscuits: 'hobnob'});
tcp.js
var log4js = require('log4js'); log4js.configure({ appenders: { logstash: { type: 'log4js-logstash-tcp', host: '192.168.88.100', port: 5050 } }, categories: { default: {appenders: ['logstash'], level: 'debug'} } }); var log = log4js.getLogger('测试数据'); log.error('test');
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)