ELK日志收集(一)
一:ELK简介
ELK=Elasticsearch+Logstash+kibana
Elasticsearch简称ES,是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
二:ELK单节点部署
1.时间同步
[root@node_01 ~]# ntpdate time1.aliyun.com
2. 准备java环境
[root@node_01 ~]# java-version #验证jiava环境是否准备好
3.ES官网下载ES软件包,顺带将filebeat,kibana的rpm包一并下载
友情提示:ES,filebeat,kibana三者在下载时注意版本保持一致。
4.单节点部署
[root@node_01 ~]# rpm -ivh elasticsearch-6.8.13.rpm
[root@node_01 ~]# systemctl daemon-reload
[root@node_01 ~]# systemctl enable elasticsearch.service # 加入开机自启
[root@node_01 ~]# systemctl start elasticsearch.service #启动服务
[root@node_01 ~]# netstat -lntp |grep java #注意,服务启动后养成习惯查看是否启动成功
[root@node_01]# curl 127.0.0.1:9200 #出现一下内容证明安装成功
{
"name" : "wUdyBOT",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "okeoXx9-QWefW6jCVhU1Xw",
"version" : {
"number" : "6.8.13",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
5.配置文件
#查看ES相关配置文件
[root@node_01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml #主配置文件
/etc/elasticsearch/jvm.options #虚拟内存设置文件
/etc/elasticsearch/log4j2.properties #日志配置
/etc/elasticsearch/role_mapping.yml #索引的规则文件
/etc/elasticsearch/roles.yml #规则文件
/etc/init.d/elasticsearch #启动脚本
/etc/sysconfig/elasticsearch #es的系统配置
/usr/lib/sysctl.d/elasticsearch.conf #库文件的配置
/usr/lib/systemd/system/elasticsearch.service #systemd管理启动程序
6.修改虚拟内存设置文件
[root@es01 ~]# vim /etc/elasticsearch/jvm.options
······
-Xms1g
-Xmx1g
注意,这里的内存设置一般是机器内存的一半,但是最大不要超过32G。
7.修改.yml配置文件
[root@es01 ~]# vim /etc/elasticsearch/elasticsearch.yml
#cluster.name: my-application #集群名称【单节点不需要配置】
node.name: es-1 #节点名字
path.data: /data/es/data #数据存放目录
path.logs: /data/es/log #日志存放路径
bootstrap.memory_lock: true ##开启内存锁(在CentOS7中支持内存锁并且要修改启动脚本)
network.host: 10.0.0.71 172.16.1.71 #ES监听地址
http.port: 9200 #ES监听端口
注意:为什么要开启内存锁?
在elasticsearch配置文件中,如果没有修改bootstrap.memory_lock 参数的话,默认为false,会导致elasticsearch缓存的文件频繁的被交换出去,从而导致在查询过程中频繁的读取磁盘,磁盘IO很高。
所以,我们需要手动将bootstrap.memory_lock: true。
##最终配置:
[root@es01 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
node.name: es-1
path.data: /data/es/data
path.logs: /data/es/log
bootstrap.memory_lock: true
network.host: 10.0.0.71 172.16.1.71
http.port: 9200
8.根据修改后的配置文件创建数据目录和日志目录
[root@es01 ~]# mkdir /data/es/{data,log} -p
#授权
[root@es01 ~]# chown -R elasticsearch.elasticsearch /data/
9.重启服务
此时,我们重启服务发现启动失败。查看日志确定报错原因
[root@es01 ~]# less /data/es/log/elasticsearch.log
[2020-11-30T16:36:12,351][ERROR][o.e.b.Bootstrap ] [es-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
##报错说内存没有锁定
10.解决报错
##修改启动脚本
[root@es01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
... ...
[Service]
... ...
#修改内存限制
LimitMEMLOCK=infinity
#重新加载启动脚本
[root@es01 ~]# systemctl daemon-reload
[root@es01 ~]# systemctl restart elasticsearch
启动后检查,服务启动成功。
三.与ES进行交互
##1.使用curl命令与ES进行交互
特点:
1. 使用不方便,容易出错,命令复杂
2.不需要安装任何服务和插件,只需要curl命令
使用方式:
###1>创建索引(建库)
[root@es01 ~]# curl -XPUT '10.0.0.71:9200/student?pretty'
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "student"
}
```
###2>插入数据
[root@es01 ~]# curl -XPUT '10.0.0.71:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}'
{
"_index" : "student",
"_type" : "user",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
### 3>查看数据
[root@es01 ~]# curl -GET '10.0.0.71:9200/student/user/1?pretty'
{
"_index" : "student",
"_type" : "user",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "lhd",
"sex" : "man",
"age" : "18",
"about" : "good good study",
"interests" : [
"chinese",
"english"
]
}
}
##2.使用插件的方式进行交互
插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。
安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。
在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。
Github地址:https://github.com/mobz/elasticsearch-head
特点
1.查看数据简单,操作简单
2.需要安装nodejs,安装复杂费时
安装插件方式一:
#安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
[root@elkstack01 ~]# yum install -y npm
#进入下载head插件代码目录
[root@elkstack01 src]# cd /usr/local/
#从GitHub上克隆代码到本地
[root@elkstack01 local]# git clone git://github.com/mobz/elasticsearch-head.git
#克隆完成后,进入elasticsearch插件目录
[root@elkstack01 local]# cd elasticsearch-head/
#清除缓存
[root@elkstack01 elasticsearch-head]# npm cache clean -f
#使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
[root@elkstack01 elasticsearch-head]# npm install -g n
#安装最新版本n模块
[root@elkstack01 elasticsearch-head]# n stable
#生成grunt
[root@elkstack01 elasticsearch-head]# npm install grunt -save
#确认生成grunt文件
[root@elkstack01 elasticsearch-head]# ll node_modules/grunt
#执行安装grunt
[root@elkstack01 elasticsearch-head]# npm install
#后台启动head插件(切记,必须在插件目录下执行启动命令)
[root@elkstack01 elasticsearch-head]# npm run start &
#验证端口是否启动成功
[root@elkstack01 elasticsearch-head]# netstat -lntup
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt
#启动成功后,修改elasticsearch配置文件
[root@elkstack01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启elasticsearch
[root@elkstack01 elasticsearch-head]# /etc/init.d/elasticsearch restart
插件安装方式二
1.windows下创建一个目录
2.将插件解压到目录下
3.谷歌浏览器,右上角三个点或者是哪个竖线或者箭头
4.更多工具 -> 扩展程序
5.打开开发者模式
6.加载已解压的扩展程序,选中解压包的目录
7.使用时,直接点击搜索框后面的放大镜
方式三使用kibana进行交互
1.安装kibana
1).上传包
[root@es01 ~]# rz kibana-6.6.0-x86_64.rpm
[root@es01 ~]# ll
-rw-r--r-- 1 root root 185123116 Jan 29 2019 kibana-6.6.0-x86_64.rpm
2).安装
[root@es01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm
3)配置
[root@es01 ~]# grep '^[a-z]' /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.71"
elasticsearch.hosts: ["http://172.16.1.71:9200"]
4)启动
[root@es01 ~]# systemctl start kibana
#验证
[root@es01 ~]# netstat -lntp
tcp 0 0 10.0.0.71:5601
5)访问测试
http://10.0.0.71:5601