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 }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容