ELK
是npm install 而不是cnpm install
是npm run start而不是 npm start
此处是network.host
kibana处是server.host
ELK安装
1 安装elasticsearch
1.1 下载安装包并解压
cd /usr/local
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
tar -zxvf elasticsearch-6.6.2.tar.gz
cd elasticsearch-6.6.2
1.2 修改配置文件
vi config/Elasticsearch.yml
# 设置外网访问,默认外网无法访问
network.host: 0.0.0.0
1.3 修改jvm分配大小
vi config/jvm.options
# xms要和xmx大小一致,内存大小根据自己需要调整
-Xms512m
-Xmx512m
1.4 修改系统环境变量
# 查看当前系统环境变量
sysctl -a|grep vm.max_map_count
# 结果
65530
vi /etc/sysctl.conf
# 添加如下内容
vm.max_map_count=262144
# 此修改需重启才能生效,若不方便重启,执行如下命令即可,保证当前环境做了修改
sysctl -w vm.max_map_count=262144
1.5 修改最大文件描述符数量和用户最大线程数
vim /etc/security/limits.conf
# 添加如下内容,星号代表所用用户
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
1.6 启动
# 添加用户
useradd zhoutian
echo "123456" | passwd zhoutian --stdin
# 把elasticsearch设置为用户所属
chown -R zhoutian:zhoutian ./
# 在root下修改权限文件,授予用户超级管理员的权限
vi /etc/sudoers
# 添加如下内容
zhoutian ALL=(ALL) ALL
# 前台启动
bin/elasticsearch
# 后台启动
bin/elasticsearch -d
1.7 分词器
将相关分词器下载后解压到elasticsearch的plugins目录下即可使用
ik分词器下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.6.2
拼音分词器下载地址
https://github.com/medcl/elasticsearch-analysis-pinyin/releases/tag/v6.6.2
2 安装head插件
2.1 head插件主要用途
elasticsearch-head是一个用来浏览、与Elastic Search簇进行交互的web前端展示插件。
elasticsearch-head是一个用来监控Elastic Search状态的客户端插件。
elasticsearch主要有以下操作——
1)簇浏览,显示簇的拓扑并允许你执行索引(index)和节点层⾯的操作。
2)查询接口,允许你查询簇并以原始json格式或表格的形式显示检索结果。
3)显示簇状态,有许多快速访问的tabs用来显示簇的状态。
4)支持持Restful API接口,包含了许多选项产生感兴趣的结果,包括:
第一,请求方式:get、put、post、delete;json请求数据、节点node、路径path。
第二,JSON验证器。
第三,定时请求的能力。
第四,用javascript表达式传输结果的能力。
第五,统计⼀段时间的结果或该段时间结果⽐对的能力。
第六,以简单图标的形式绘制传输结果
2.2 安装node.js
2.2.1 下载安装包并解压
cd /usr/local/
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar -xJf node-v10.16.3-linux-x64.tar.xz
# 重命名
mv node-v10.16.3-linux-x64 nodeJS
2.2.2 修改配置文件
vim /etc/profile
# 在文件最后面追加node.js环境变量
export NODE_HOME=/usr/local/node-v10.16.3-linux-x64
export PATH=$NODE_HOME/bin:$PATH
# 刷新配置文件
source /etc/profile
2.2.3 验证是否安装成功
node -v
npm -v
2.3 安装head插件
2.3.1 下载安装包并解压
cd /usr/local/
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
2.3.2 执行安装命令
cd elasticsearch-head-master/
npm install
2.3.3 运行
npm run start
2.3.4 连接配置
此时未连接,需要配置才能连接:
2.3.4.1 修改 Gruntfile.js文件:
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*' # 此行为新添加
}
}
}
2.3.4.2 修改app.js
vi _site/app.js
this._super();
this.prefs = services.Preferences.instance();
-- 改为自己的elasticsearch的地址和端口
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.81.130:9200";
2.3.4.3 启动CORS
当head插件访问es时,您必须在elasticsearch中启动CORS,否则您的浏览器将拒绝跨域,因为默认情况下不允许跨域。
vi elasticsearch-6.6.2/config/elasticearch.yml
-- 在配置文件末尾添加如下内容,
http.cors.enabled: true
http.cors.allow-origin: "*"
由于这样配置的任何地方都可以访问,所以有安全风险。
2.3.5 重启ES和head插件可访问
3 安装logstash
3.1 LogStash插件介绍
Logstash是一个具有实时管道的开源数据收集引擎。可以动态地统⼀不同来源的数据,并将数据归到不同目的地。也是一个管理事件和日志工具。你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用。
Logstash 通常都是和 Kibana 以及 Elasticsearch 一起使用。
3.2 logStash安装
注意版本和elasticsearch、kibana 必须保持⼀致,es、kibana都是6.6.2版本
3.2.1 下载安装包并解压
cd /usr/local/
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.2.tar.gz
tar -zxvf logstash-6.6.2.tar.gz
3.2.2 启动
cd logstash-6.6.2/bin/
./logstash -e 'input{ stdin{} } output{ stdout{} }'
./logstash -e 'input{ stdin{} } output{ stdout{ codec => json } }'
日志内容写入elasticsearch。注意elasticsearch插件的语法格式:hosts 对应数组
./logstash -e 'input{ stdin{} } output{ elasticsearch{hosts =>["192.168.81.130:9200"]} }'
日志内容写入elasticsearch,同时输出到控制台
./logstash -e 'input{ stdin{} } output{ elasticsearch{hosts =>["192.168.81.130:9200"]} stdout{} }'
3.3 logStash插件
3.3.1 input插件
输入较常用的几个插件:stdin、file、http、tcp
3.3.2 output插件
输入较常用的几个插件:stdout、file、http、tcp、elasticsearch
3.3.3 codec插件
codec(Code Decode)插件作用于input和output插件,负责将数据在原始与Logstash之间转换,常用的codec有:
- plain 读取原始内容
- dots 将内容简化为点进行输出
- rubydebug 将内容按照ruby格式输出,方便调试
- line 处理带有换行符的内容
- json 处理json格式的内容
- multiline 处理多⾏数据的内容
3.4 logStash配置
创建配置
cd ../config
touch logstash.conf
详细配置如下
input { stdin { } }
output {
elasticsearch { hosts => ["192.168.81.130:9200"] }
stdout { codec => rubydebug }
}
启动logstash
cd ../bin/
./logstash -f config/logstash.conf
3.5 file日志收集
创建新的配置文件
mv logstash.conf file.conf
详细配置如下
input {
file{
path => "/var/log/messages" # 收集messages文件日志
type => "system"
start_position => "beginning" # 记录上次收集的位置
}
}
output {
elasticsearch {
hosts => ["192.168.81.130:9200"] # 写入elasticsearch的地址
index => "system-%{+YYYY.MM.dd}" # 定义索引的名称
}
stdout { codec => rubydebug }
}
启动logstash
cd ../bin/
./logstash -f config/file.conf
3.6 Java日志收集
#在原来file文件的基础上进行编辑
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
#加一个file插件收集elasticsearch日志
#es就是java语言开发的。
file{
path => "/usr/local/elasticsearch-6.6.2/logs/elasticsearch.log"
type => "es-info"
start_position => "beginning"
}
}
output {
#判断,导入到不同的索引库,否则会放入同一个索引库中
if [type] == "system"{
elasticsearch {
hosts => ["192.168.81.130:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
#判断,导入到不同的索引库,否则会放入同一个索引库中
if [type] == "es-info"{
elasticsearch {
hosts => ["192.168.81.130:9200"]
index => "es-info-%{+YYYY.MM.dd}"
}
}
stdout { codec => rubydebug }
}
目前导入日志都是按照行导入的,但是有些日志多行是一句话,如果分开的话就不太容查看日志的完整的意思了。可以使用codec插件来进行解决,codec把多行日志合并为一行。
file{
path => "/usr/local/elasticsearch-6.6.2/logs/elasticsearch.log"
type => "es-info"
start_position => "beginning"
# 使用正则表达式,合并多行日志
codec => multiline {
pattern => "^\[" # 发现中括号就合并日志
negate => true
what => "previous"
}
}
4 安装Kibana
4.1 kibana 插件介绍
kibana 插件提供了Marvel监控的UI界面。kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。 kibana使得理解大容量的数据变得非常容易。它非常简单,基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘。
4.2 kibana下载
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-linux-x86_64.tar.gz
tar -zxvf kibana-6.6.2-linux-x86_64.tar.gz
4.3 环境配置
cd /kibana-6.6.2-linux-x86_64/config/
vi kibana.yml
# 将默认配置改成如下
server.port: 5601
server.host: "192.168.81.130"
elasticsearch.hosts: ["http://192.168.81.130:9200"]
kibana.index: ".kibana"
4.4 启动、访问与关闭
# 前台启动
./bin/kibana
# 后台启动
nohup ./bin/kibana &
访问地址:192.168.81.130:5601
查看启动日志 : tail -f nohup
kibana使用ps -ef|grep kibana是查不到进程的,主要原因大概是因为kibana是node写的。所以kibana 运行的时候是运行在node 里面。
所以可以使用ps -ef|grep node查看到进程。但是带有node不一定就是kibana的进程。怎么办呢 ? 我们知道5601是kibana对外的tcp端口。所以使用netstat -tunlp|grep 5601就可以查到进程id了 。
5 nginx日志
5.1 JSON格式日志
5.1.1 文本格式(默认格式)
开启日志,把日志写入到日志文件
01.png
日志内容如下所示
02.png
发现日志都是一行普通文本格式的日志。这样不利于logstash收集整理,是否能把这些日志直接变成json格式呢。当然是可以的。
5.1.2 JSON格式
日志格式转换配置如下所示:
03.png
输出日志引用此格式输出日志:
04.png
日志输出效果如下所示:
05.png
发现日志已经完成变成json格式了。
5.2 logstash收集
5.2.1 配置文件
# 把日志文件日志以json格式输入
input {
file{
path => "/usr/local/src/logs/host.access.log"
codec => json
}
}
# 在logstash 控制台看一下输出日志的格式
output {
stdout {
codec => rubydebug
}
}
5.2.2 导入到es
# 输入插件
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file{
path => "/home/es/elasticsearch-6.2.4/logs/elasticsearch.log"
type => "es-info"
start_position => "beginning"
}
# 收集nginx日志
file{
path => "/usr/local/src/logs/host.access.log"
type => "nginx-log"
start_position => "beginning"
codec => json
}
}
# 输出插件
output {
if [type] == "system"{
elasticsearch {
hosts => ["192.168.66.66:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
if [type] == "es-info"{
elasticsearch {
hosts => ["192.168.66.66:9200"]
index => "es-info-%{+YYYY.MM.dd}"
}
}
# 添加nginx日志
if [type] == "nginx-log"{
elasticsearch {
hosts => ["192.168.66.66:9200"]
index => "nginx-log-%{+YYYY.MM.dd}"
}
}
# 同时在控制台输出
stdout { codec => rubydebug }
}