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. CCNA 之 七 路由协议 三 OSPF

    OSPF协议 OSPF开放式最短路径优先 全称:Open Shortest Path First 是目前使用最为广泛的路由协议,主要因为OSPF是开放式协议,和IGRP.EIGRP思科的私有协议不同. ...

  2. python小知识课堂

    啦啦啦 with上下文管理 __class__和type的关系

  3. python基础-并发编程part01

    并发编程 操作系统发展史 穿孔卡片 读取数据速度特别慢,CPU利用率极低 单用户使用 批处理 读取数据速度特别慢,CPU利用率极低 联机使用 脱机批处理(现代操作系统的设计原理) 读取数据速度提高 C ...

  4. IDEA 自定义代码块

    使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ...

  5. php踩过的那些坑(5)浮点数计算

    一.前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦.比如今天工作终于到的一个案例: $a = 2586; $ ...

  6. pod install/update速度慢或失败的解决方案实践

    本文基于 https://www.cnblogs.com/dabaomo/p/9634727.html 声明 坚决拥护党的领导,本文章所用技术乃出于工作需要,敬请谅解. 正文 可以先过去快速浏览一遍再 ...

  7. Reactive(1) 从响应式编程到"好莱坞"

    目录 概念 面向流设计 异步化 响应式宣言 参考文档 概念 Reactive Programming(响应式编程)已经不是一个新东西了. 关于 Reactive 其实是一个泛化的概念,由于很抽象,一些 ...

  8. mac 命令记录

    1. 安装 mysqlworkbench brew search mysql brew tap caskroom/cask brew cask search mysql brew cask insta ...

  9. Go游戏服务端框架从零搭建(一)— 架构设计

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居海边. 本教程以Go语言分区游戏服务端框架搭建为例. Go语言是Google开发的一种静态强类型.编译型.并发型.具有垃圾回收功能的编程语言.语法上近似C语 ...

  10. 16.Django学习之文件上传和下载

    上传就这么六步! 一. settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').repl ...