博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ELK 安装部署小计
阅读量:5091 次
发布时间:2019-06-13

本文共 6304 字,大约阅读时间需要 21 分钟。

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

#elasticsearch安装部署wget  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.tar.gztar -zxvf  elasticsearch-6.0.1.tar.gzcd elasticsearch-6.0.1#配置。 如下 集群名称;节点名称;供外网访问的ip(xxx.xxx.xxx.xxx或0.0.0.0);端口(注意空格)vi config/elasticsearch.ymlcluster.name: my-applicationnode.name: node-1network.host: iphttp.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:9200#kibana安装部署wget  https://artifacts.elastic.co/downloads/kibana/kibana-6.0.1-linux-x86_64.tar.gztar -zxvf kibana-6.0.1-linux-x86_64.tar.gzcd kibana-6.0.1vi config/kibana.yml#配置信息  服务端口;kibana服务ip;es的外网访问ip;indexserver.port: 5601server.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:5601#Logstash安装部署wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.tar.gztar -zxvf logstash-6.0.1.tar.gzcd logstash-6.0.1#配置vi logstash-6.0.1/config/logs_to_es.confinput {   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_(?
[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”终于找到了

(其实之前找到了 )

后面明白,只能通过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-9._-]+USER %{USERNAME}INT (?:[+-]?(?:[0-9]+))BASE10NUM (?
[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))NUMBER (?:%{BASE10NUM})BASE16NUM (?
(?
”(?>\\.|[^\\"]+)+”|”"|(?>’(?>\\.|[^\\']+)+’)|”|(?>(?>\\.|[^\]+)+)|`))UUID [A-Fa-f0-9]{
8}-(?:[A-Fa-f0-9]{
4}-){
3}[A-Fa-f0-9]{
12}MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})IPV4 (?
\d\d){
1,2}HOUR (?:2[0123]|[01]?[0-9])MINUTE (?:[0-5][0-9])# ’60′ is a leap second in most time standards and thus is valid.SECOND (?:(?:[0-5][0-9]|60)(?:[:.,][0-9]+)?)TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])# 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}|60)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 LevelsLOGLEVEL ([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)?)

 

 

 参考

 

posted on
2019-05-25 17:27 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/FlyAway2013/p/10923160.html

你可能感兴趣的文章
深度学习----Xavier初始化方法
查看>>
springmvc 初始化参数绑定(使用属性编辑器) 来处理类型转换问题
查看>>
数论——扩展欧几里得算法与线性同余方程
查看>>
How to unblock Youku
查看>>
测试用例设计方法与举例说明
查看>>
个体工商营业执照PSD素材最新版下载
查看>>
微信的发展演变
查看>>
解决hive交互模式退格键乱码
查看>>
面试题题解
查看>>
理财入门类书籍读书笔记
查看>>
插入排序
查看>>
使用idea构建Hibernate5项目
查看>>
JMeter Webservice API测试计划
查看>>
『计算机视觉』物体检测之RefineDet系列
查看>>
MessageBox如何输出整数
查看>>
【置顶】通知:博客永久迁移 (欢迎来新家哦)
查看>>
JSON
查看>>
栈和队列 迷宫求解
查看>>
Java基础 第五章 循环结构(二) 笔记
查看>>
CSS3制作的一款很酷的错位式导航菜单,可用于博客
查看>>