ELK的安装部署已经是第N次了! 其实也很简单,这里记下来,以免忘记。

#elasticsearch安装部署
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.tar.gz
tar -zxvf elasticsearch-6.0..tar.gz
cd elasticsearch-6.0. #配置。 如下 集群名称;节点名称;供外网访问的ip(xxx.xxx.xxx.xxx或0.0.0.);端口(注意空格)
vi config/elasticsearch.yml
cluster.name: my-application
node.name: node-
network.host: ip
http.port: 9200 修改系统参数:

  echo "*               soft    nofile          65536
  *               hard    nofile          65536" >>  /etc/security/limits.conf

  echo "vm.max_map_count=262144"  >>  /etc/sysctl.conf

#启动
useradd es # 需要非root 用户
su es
./bin/elasticsearch -d
# ./elasticsearch -q 关闭
exit
cd .. #访问
curl ip: #kibana安装部署
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.1-linux-x86_64.tar.gz
tar -zxvf kibana-6.0.-linux-x86_64.tar.gz
cd kibana-6.0. vi config/kibana.yml
#配置信息 服务端口;kibana服务ip;es的外网访问ip;index
server.port:
server.host: "0.0.0.0"
elasticsearch.url: "http://xxx.xxx.xxx.xxx:9200" # 注意ip、url不能使用localhost、127.0.0.1, 必须使用实际的ip!!!
kibana.index: ".kibana" #启动
nohup ./bin/kibana &
cd .. #访问
curl ip: #Logstash安装部署
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.tar.gz
tar -zxvf logstash-6.0..tar.gz
cd logstash-6.0. #配置
vi logstash-6.0./config/logs_to_es.conf
input {
file {
type => "tomcat-catalina"
path => "/opt/apps/apache-tomcat7/logs/catalina.log"
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "xxx.xxx.xxx.xxx:9200" #ElasticSearch host, can be array.
index => "tomcat_log" #The index to write data to.
}
} #启动
nohup ./bin/logstash -f config/logs_to_es.conf &
cd .. 测试:
# Logstash管道测试代码
bin/logstash -e 'input{stdin {}} output{stdout{}}' # 参考 https://blog.csdn.net/zhaojiweiwin/article/details/80281525

上面的脚本,只要把vi 部分换成sed -i 或类似免交互的命令,那么其实是可以一键 快速完成ELK的安装部署。 需要注意的是 ip 是不能使用localhost 或 127.0.0.1的, 而是需要实际的ip。需要注意的是,es启动之前需要设置一下linux系统的一些参数: /etc/security/limits.conf,  /etc/sysctl.conf,否则会启动报错。至于为什么,我觉得可能是es需要打开很多很多的文件句柄。 nofile其实是最大能够打开的文件数,跟ulimit -n含义差不多,但是通过ulimit -n设置是临时的,通过/etc/security/limits.conf设置才是永久的;max_map_count 是虚拟内存映射,是允许一个进程在VMAs(虚拟内存区域)拥有最大数量,VMA是一个连续的虚拟地址空间,当进程创建一个内存映像文件时VMA的地址空间就会增加,当达到max_map_count了就是返回out of memory errors。它也可以通过sysctl -w进行设置,但是也是临时的,需要写入  /etc/sysctl.conf才是永久的。

当然,上面的logstash 的配置文件是很示例的,可能不够。 我实际上使用的是下面的配置:

input {
file {
type => "erdp-rc"
#path => "/app/java/logs/nohup-erdp_${WORD:app}-*.log"
path => "/app/java/logs/nohup-erdp_*.log"
#add_field => {"app2"=>"aa"}
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}
filter {
#Only matched data are send to output.
grok {
# match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s? %{LOGLEVEL:level} %{INT:pid} --- \[%{URIPATHPARAM:thread}\] %{NOTSPACE:clz}\s+: %{GREEDYDATA:msg}" }
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s? %{LOGLEVEL:level} %{INT:pid} --- \[%{NOTSPACE:thread}\] %{NOTSPACE:clz}\s+: %{GREEDYDATA:msg}" }
} grok {
# match => ["path","%{GREEDYDATA}/nohup-erdp_%{WORD:appName}_%{GREEDYDATA}\.log"]
match => ["path","%{GREEDYDATA}/nohup-erdp_(?<appName>[a-zA-Z0-9.-]+)_%{DATA}\.log"]
} # date {
# match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss.SSS" ]
# }
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "192.168.11.183:9200" #ElasticSearch host, can be array.
index => "erdp_log" #The index to write data to.
}
}

上面的两个grok 花了我不少时间。有些蛋疼。grok确实是个麻烦的玩意,每次都要折腾一番。 因为 Logstash不方便调试,需要修改conf,然后重启,然后操作,然后等待日志输出到elk,然后kibana上面观察。观察不到呢, 还要怀疑是否是自己的查询条件写错了,各种修改、折腾。这样的一次手动调试下来需要2-6分钟。 在线的grok debugger又用不了。 真是麻烦。

如上,可以看到 URIPATHPARAM 用来匹配线程 thread  就出问题了! 开始一直没怀疑。为什么URIPATHPARAM 不行,而NOTSPACE 就可以呢?如下

URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
#URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?

我感觉是匹配到 URIPATHPARAM  后面的就出问题了,但是Logstash 没有报错。 所以,问题一直排查不出来。

另外,需要通过文件名, 找到对应的应用,添加一个app_name 的字段,搞了好久啊。

最开始的时候想通过input-file-add_field 插件添加进来,发现input-file 的path 无法使用分组,无法将文件名读取到,其他通配符也无效。。

搜索“logstash path  添加字段” ,不行。 后面搜索“logstash get the file name as field”终于找到了

https://stackoverflow.com/questions/23780000/use-grok-to-add-the-log-filename-as-a-field-in-logstash

https://stackoverflow.com/questions/22916200/logstash-how-to-add-file-name-as-a-field

(其实之前找到了 http://www.voidcn.com/article/p-rueddyth-btd.html, 但是觉得这样效率低,我就想通过add_field,而不想通过grok 的方式

后面明白,只能通过grok 的方式了! 仔细想想, 其实grok 的方式的效率应该是也是差不多的。

另外注意到 filter的 grok 是可以多个的, input 的file 其实也可以多个并行。

但是,我需要通过log文件名再截取一段,appName, 发现 %{WORD:appName}, 发现死活不行,或时好时坏, 后面改成 [a-zA-Z0-9.-]+), 就终于好了!浪费一两个小时时间啊!

仔细检查,原来啊, WORD 是必须有边界的!——> WORD \b\w+\b 。 我开始还在怀疑 自定义的 grok 语法是不是搞错了呢! --> (?<field>regex) , 后面又怀疑GREEDYDATA是不是应该改为DATA。 其实都不是的。

附常见的内置的gork 正则表达式:

USERNAME [a-zA-Z0-._-]+
USER %{USERNAME}
INT (?:[+-]?(?:[-]+))
BASE10NUM (?<![-.+-])(?>[+-]?(?:(?:[-]+(?:\.[-]+)?)|(?:\.[-]+)))
NUMBER (?:%{BASE10NUM})
BASE16NUM (?<![-9A-Fa-f])(?:[+-]?(?:0x)?(?:[-9A-Fa-f]+))
BASE16FLOAT \b(?<![-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[-9A-Fa-f]+(?:\.[-9A-Fa-f]*)?)|(?:\.[-9A-Fa-f]+)))\b POSINT \b(?:[-][-]*)\b
NONNEGINT \b(?:[-]+)\b
WORD \b\w+\b
NOTSPACE \S+
SPACE \s*
DATA .*?
GREEDYDATA .*
QUOTEDSTRING (?>(?<!\\)(?>”(?>\\.|[^\\"]+)+”|”"|(?>’(?>\\.|[^\\']+)+’)|”|(?>(?>\\.|[^\]+)+)|`))
UUID [A-Fa-f0-]{}-(?:[A-Fa-f0-]{}-){}[A-Fa-f0-]{} MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})
IPV4 (?<![-])(?:(?:[-]|[-][-]|[-]?[-]{,})[.](?:[-]|[-][-]|[-]?[-]{,})[.](?:[-]|[-][-]|[-]?[-]{,})[.](?:[-]|[-][-]|[-]?[-]{,}))(?![-]) IP (?:%{IPV6}|%{IPV4})
HOSTNAME \b(?:[-9A-Za-z][-9A-Za-z-]{,})(?:\.(?:[-9A-Za-z][-9A-Za-z-]{,}))*(\.?|\b)
HOST %{HOSTNAME}
IPORHOST (?:%{HOSTNAME}|%{IP})
HOSTPORT (?:%{IPORHOST=~/\./}:%{POSINT}) # Years?
YEAR (?>\d\d){,}
HOUR (?:[]|[]?[-])
MINUTE (?:[-][-])
# ’′ is a leap second in most time standards and thus is valid. SECOND (?:(?:[-][-]|)(?:[:.,][-]+)?)
TIME (?!<[-])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![-])
# datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
ISO8601_SECOND (?:%{SECOND}|)
TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
DATE %{DATE_US}|%{DATE_EU}
DATESTAMP %{DATE}[- ]%{TIME}
TZ (?:[PMCE][SD]T|UTC)
DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR} # Log Levels
LOGLEVEL ([A-a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)

参考

https://www.cnblogs.com/dyh004/p/9700110.html

https://blog.csdn.net/teaey/article/details/21626621

ELK 安装部署小计的更多相关文章

  1. ELK 安装部署实战 (最新6.4.0版本)

    一.实战背景 根据公司平台的发展速度,对于ELK日志分析日益迫切.主要的需求有: 1.用户行为分析 2.运营活动点击率分析 作为上述2点需求,安装最新版本6.4.0是非常有必要的,大家可根据本人之前博 ...

  2. Docker ElK安装部署使用教程

    一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引 ...

  3. ELK安装部署

    一.ELK简介 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部.Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大 ...

  4. 基于【 Docker】一 || ElK安装部署使用教程

    一.ELK介绍 1.ELK组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发 ...

  5. 安装Ubuntu小计

    因为想学Linux了,所以想装一个Linux版本尝尝鲜,听说Ubuntu桌面版很炫,所以也没有啥特定理由的选了这个版本(实际我装的时候用了Ubuntu Kylin). 具体安装过程可以参考如下的教程: ...

  6. snmp--CentOS安装Net-SNMP小计

    http://blog.csdn.net/tmpbook/article/details/39620549

  7. ELK详细安装部署

    一.前言 ​ 日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题.分析日志可以更清楚的了解服务器的状态和 ...

  8. ELK日志监控平台安装部署简介--Elasticsearch安装部署

    最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...

  9. ELK文档-安装部署

    一.ELK简介 请参考:http://www.cnblogs.com/aresxin/p/8035137.html 二.ElasticSearch安装部署 请参考:http://blog.51cto. ...

随机推荐

  1. Python 网络爬虫程序详解

    #!/usr/bin/python #调用python from sys import argv #导入sys是导入python解释器和他环境相关的参数 from os import makedirs ...

  2. 单核苷酸多态性SNP(single nucleotide polymorphism)

    定义 主要指基因组水平上由单个核苷酸的变异所引起的 DNA 序列多态性. 在基因组水平上由单个核苷酸的变异所引起的DNA序列多态性.即:在不同个体的同一条染色体或同一位点的核苷酸序列中,绝大多数核苷酸 ...

  3. c语言作业07

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...

  4. ASP.NET Core3.X 终端中间件转换为端点路由运行

    引言 前几天.NET Core3.1发布,于是我把公司一个基础通用系统升级了,同时删除了几个基础模块当然这几个基础模块与.NET Core3.1无关,其中包括了支付模块,升级完后静文(同事)问我你把支 ...

  5. hospital:广西大学生计算机设计大赛

    html 当时做到的就是这些了 <!DOCTYPE html><html lang="en"><head> <title>病人信息查 ...

  6. 双显卡安装Ubuntu 18.04和NVIDIA驱动

    踩坑笔记: 用软碟通制作UBUNTU18.04 LTS启动盘 长按DEL键进入BIOS,关闭Security Boot,设置USB优先启动 在黑白的grub引导界面(第一行是Try Ubuntu- 第 ...

  7. 写一个umi插件 自动生成代码 解放cv的双手

    引言 最近在写一个中台项目,使用的react的umi框架. 各种增删改查.基本是列表页 新建页 详情页这种页面 为了避免不必要的简单重复(主要是想偷懒) 于是想去实现自己的一个代码生成器 探索 首先, ...

  8. 洛谷 3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题解

    本蒟蒻又来发题解了, 一道较水的模拟题. 题意不过多解释, 思路如下: 在最开始的时候求出每头牛在t秒的位置(最终位置 然后,如果后一头牛追上了前一头牛,那就无视它, 把它们看成一个整体. else ...

  9. 洛谷 P2388 阶乘之乘 题解

    本蒟蒻又来发题解了QwQ; 看到这个题目,本蒟蒻第一眼就想写打个暴力: 嗯,坏习惯: 但是,动动脑子想一想就知道,普通的的暴力是过不了的: 但是,身为蒟蒻的我,也想不出什么高级的数学方法来优化: 好, ...

  10. Startup/OWIN框架

    为什么写OWIN框架呢? 因为没接触刀OWIN框架直接去学.NET Core比较生硬,个人见解.首先我们要知道OWIN的由来:ASP.NET和IIS和Windows操作系统的关系在之前是紧密联系的,缺 ...