ELK YUM 安装部署

ELK YUM 安装部署

ELK 官网:
https://www.elastic.co/cn/what-is/elk-stack

ElasticSearch

ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用

基本概念:
Index
定义:类似于mysql中的database。索引只是一个逻辑上的空间,物理上是分为多个文件来管理的。
命名:必须全小写
描述:在实践过程中每个index都会有一个相应的副 本。主要用来在硬件出现问题时,用来回滚数据的。这也某种程序上,加剧了ES对于内存高要求。
Type
定义:类似于mysql中的table,根据用户需求每个index中可以新建任意数量的type。
Document
定义:对应mysql中的row。有点类似于MongoDB中的文档结构,每个Document是一个json格式的文本
Mapping
更像是一个用来定义每个字段类型的语义规范。在mysql中类似sql语句,在ES中经过包装后,都被封装为友好的Restful风格的接口进行操作。

这一点也是为什么开发人员更愿意使用ES的原因。
Shards & Replicas
定义:能够为每个索引提供水平的扩展以及备份操作。保证了数据的完整性和安全性
描述:
Shards:在单个节点中,index的存储始终是有限制,并且随着存储的增大会带来性能的问题。为了解决这个问题,ElasticSearch提供一个能够分割单个index到集群各个节点的功能。你可以在新建这个索引时,手动的定义每个索引分片的数量。
Replicas:在每个node出现宕机或者下线的情况,Replicas能够在该节点下线的同时将副本同时自动分配到其他仍然可用的节点。而且在提供搜索的同时,允许进行扩展节点的数量,在这个期间并不会出现服务终止的情况。
默认情况下,每个索引会分配5个分片,并且对应5个分片副本,同时会出现一个完整的副本【包括5个分配的副本数据】。

前提:关闭防火墙,关闭selinux

systemctl stop firewalld

setenforce 0

系统优化:

[root@node1 ~]# cat  /etc/security/limits.conf |tail -n 15
*       soft    nproc       65535
*       soft    nofile      65535
*       hard    nproc       65535
*       hard    nofile      65535<br><br>vi /etc/sysctl.conf  加一行<br>vm.max_map_coun=655360

vm.max_map_coun=655360

三个组件都安装到一台服务器上

129:ES+kibana

131:logstash

1 安装jdk

rpm -ivh jdk-8u131-linux-x64_.rpm

2 配置elasticsearch 的yum源

[root@node1 ~]# cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install elasticsearch

配置开机自启动

[root@node1 ~]# systemctl enable elasticsearch.service

开启服务

[root@node1 ~]# systemctl start elasticsearch.service

验证服务是否启动

[root@localhost elasticsearch]# netstat  -lptnu|grep java
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      51790/java         
tcp6       0      0 ::1:9200                :::*                    LISTEN      51790/java         
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      51790/java         
tcp6       0      0 ::1:9300                :::*                    LISTEN      51790/java

监听端口:

9200作为Http协议,主要用于外部通讯

9300作为Tcp协议,ES集群之间是通过9300进行通讯

配置文件路径:

[root@localhost elasticsearch]# ll /etc/elasticsearch/
total 36
-rw-rw----. 1 root elasticsearch   199 Nov  7 01:56 elasticsearch.keystore
-rw-rw----. 1 root elasticsearch  2869 Oct 15 23:31 elasticsearch.yml
-rw-rw----. 1 root elasticsearch  3685 Oct 15 23:31 jvm.options
-rw-rw----. 1 root elasticsearch 13085 Oct 15 23:31 log4j2.properties
-rw-rw----. 1 root elasticsearch   473 Oct 15 23:31 role_mapping.yml
-rw-rw----. 1 root elasticsearch   197 Oct 15 23:31 roles.yml
-rw-rw----. 1 root elasticsearch     0 Oct 15 23:31 users
-rw-rw----. 1 root elasticsearch     0 Oct 15 23:31 users_roles
[root@huazai007 ~]# cat  /etc/elasticsearch/elasticsearch.yml |grep -v '^#'
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 172.18.47.110
http.port: 9200
 

日志文件路径:

[root@localhost elasticsearch]# pwd
/var/log/elasticsearch
[root@localhost elasticsearch]# ll
total 48
-rw-r--r--. 1 elasticsearch elasticsearch     0 Nov  7 01:58 elasticsearch_access.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 Nov  7 01:58 elasticsearch_audit.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 Nov  7 01:58 elasticsearch_deprecation.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 Nov  7 01:58 elasticsearch_index_indexing_slowlog.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 Nov  7 01:58 elasticsearch_index_search_slowlog.log
-rw-r--r--. 1 elasticsearch elasticsearch  8502 Nov  7 01:58 elasticsearch.log
-rw-r--r--. 1 elasticsearch elasticsearch 35454 Nov  7 02:00 gc.log.0.current

elasticsearch 配置详解:

cluster部分:==========
cluster.name: elasticsearch
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,
如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
 
node部分:===========
node.name: node-1
定义节点名称
node.attr.rack: r1
向节点添加自定义属性
 
Paths部分:==========
path.data: /var/lib/elasticsearch
设置索引数据的存储路径
path.logs: /var/log/elasticsearch
设置日志文件的存储路径
 
Memory部分:=======
bootstrap.memory_lock: true
启动时锁定内存,为了保证es正常运行
 
Network部分:========
network.host: 192.168.0.1
设置绑定的ip地址,可以是ipv4或ipv6的
http.port: 9200
设置对外服务的http端口,默认为9200。
 
Discovery部分:=======
 
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.minimum_master_nodes:
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。
默认为1,对于大的集群来说,可以设置大一点的值(2-4)
 
Gateway部分:========
gateway.recover_after_nodes: 3
设置集群中N个节点启动时进行数据恢复,默认为1
 
Various部分: [ˈveriəs]=======各种各样====
action.destructive_requires_name: true
删除索引时需要显式名称

常用命令:

验证服务

curl -X GET http://127.0.0.1:9200

elasticsearch 查看集群统计信息

curl -XGET ‘http://localhost:9200/_cluster/stats?pretty’

查看集群状态

curl -X GET ‘localhost:9200/_cat/health?v’

创建索引:test_index

curl -X PUT HTTP://localhost:9200/test_index?pretty

elasticsearch 查看所有索引

curl -X GET HTTP://localhost:9200/_cat/indices?v

curl -s http://192.168.1.9:9200/_cat/indices|grep “msg”|awk ‘{print $3}’|sort

删除索引:test_index

curl -XDELETE ‘localhost:9200/test_index?pretty’

logstash工作原理:

Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。

支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
Input模块:输入数据到logstash。
一些常用的输入为:

file:从文件系统的文件中读取,类似于tail-f命令

redis:从redis service中读取

beats:从filebeat中读取

kafka:从kafka队列中读取

Filters:数据中间处理,对数据进行操作。
一些常用的过滤器为:

grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。

它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。内置120多个解析语法。

官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在线调试:https://grokdebug.herokuapp.com/

mutate [ˈmjuːteɪt]:对字段进行转换。

例如对字段进行删除、替换、修改、重命名等。

drop:丢弃一部分events不进行处理。

clone:拷贝 event,这个过程中也可以添加或移除字段。

geoip:添加地理信息(为前台kibana图形化展示使用)

Outputs模块:outputs是logstash处理管道的最末端组件。
一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

一些常见的outputs为:

elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

file:将event数据保存到文件中。

graphite [ˈɡræfaɪt]:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。
Codecs模块:codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。
一些常见的codecs:

json:使用json格式对数据进行编码/解码。

multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息。

3 logstash 安装

配置logstash yum 源

[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install logstash

配置文件路径:

[root@localhost logstash]# pwd
/etc/logstash
[root@localhost logstash]# ll
total 36
drwxrwxr-x. 2 root root    6 Oct 16 00:57 conf.d
-rw-r--r--. 1 root root 1915 Oct 16 00:57 jvm.options
-rw-r--r--. 1 root root 4568 Oct 16 00:57 log4j2.properties
-rw-r--r--. 1 root root  342 Oct 16 00:57 logstash-sample.conf
-rw-r--r--. 1 root root 8236 Nov  7 02:33 logstash.yml
-rw-r--r--. 1 root root  285 Oct 16 00:57 pipelines.yml
-rw-------. 1 root root 1696 Oct 16 00:57 startup.options

日志文件路径:

[root@localhost logstash]# pwd
/var/log/logstash
[root@localhost logstash]# ll
total 4
-rw-r--r--. 1 logstash logstash 1644 Nov  7 02:36 logstash-plain.log
-rw-r--r--. 1 logstash logstash    0 Nov  7 02:35 logstash-slowlog-plain.log

logstash是用来收集日志,并对日志做过滤处理的,我们下面要分析的是系统日志,所以要编写一个收集日志的配置文件

vim /etc/logstash/conf.d/system.conf

input日志输入模块:日志的获取方式和路径input {
    file {
       path => "/var/log/messages"
       type => "system-log"
       start_position => "beginning"
    }
}
output日志的输出模块:导出你的数据
output {
    elasticsearch {
      hosts => "192.168.10.129:9200"
      index => "system_log-%{+YYYY.MM.dd}"
    }
}

这里为了测试,将/var/log/messages日志的权限修改为了644

chmod 777 /var/log/messages

如果conf.d 下有多个配置文件需要修改pipelines.yml(管道)文件

- pipeline.id: main
  path.config: "/etc/logstash/conf.d/system.conf"
- pipeline.id: sec
  path.config: "/etc/logstash/conf.d/sec.conf"
 

配置开机自启动

[root@localhost ~]# systemctl enable logstash.service
启动logstash服务
[root@localhost ~]# systemctl start logstash.service

监听端口:

[root@localhost logstash]# netstat -lptnu|grep java
tcp6 0 0 127.0.0.1:9600 ::😗 LISTEN 6722/java

4 安装kibana

配置yum 源

[kibana-6.x]
name=Kibana repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

systemctl enable kibana.service

systemctl start kibana

配置kibana

这里只需要配置监听地址和elasticsearch的ip就可以了

vim /etc/kibana/kibana.yml

[root@localhost yum.repos.d]# cat /etc/kibana/kibana.yml |grep -v “^#”
server.port: 5601
server.host: “0.0.0.0”
elasticsearch.hosts: [“http://192.168.10.129:9200”]

启动服务:

Systemctl start kibana

监听端口:5601

在kibana上创建索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择创建图形类型为线形图

在这里插入图片描述
选择绘画哪个索引的图形
在这里插入图片描述
选择x轴为绘画日期的柱状图,然后点击开始获取数据
在这里插入图片描述

ELK GROK 内置变量

在这里插入图片描述
在这里插入图片描述

USERNAME [a-zA-Z0-9._-]+      #定义好的表达式的名字
USER %{USERNAME}               # 引用或者调用%表示:%{表达式名字:匹配之后要放的字段名称}
INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
 
POSINT \b(?:[1-9][0-9]*)\b
NONNEGINT \b(?:[0-9]+)\b
WORD \b\w+\b
NOTSPACE \S+
SPACE \s*
DATA .*?
GREEDYDATA .*
QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
 
# Networking
MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})
CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
IP (?:%{IPV6}|%{IPV4})
HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
HOST %{HOSTNAME}
IPORHOST (?:%{HOSTNAME}|%{IP})
HOSTPORT %{IPORHOST}:%{POSINT}
 
# paths
PATH (?:%{UNIXPATH}|%{WINPATH})
UNIXPATH (?>/(?>[\w_%!$@:.,-]+|\\.)*)+
TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
URIHOST %{IPORHOST}(?::%{POSINT:port})?
# uripath comes loosely from RFC1738, but mostly from what Firefox
# doesn't turn into %XX
URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
#URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
 
# Months: January, Feb, 3, 03, 12, December
MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
MONTHNUM (?:0?[1-9]|1[0-2])
MONTHNUM2 (?:0[1-9]|1[0-2])
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
 
# Days: Monday, Tue, Thu, etc...
DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
 
# Years?
YEAR (?>\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_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
 
# Syslog Dates: Month Day HH:MM:SS
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
PROG (?:[\w._/%-]+)
SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
SYSLOGHOST %{IPORHOST}
SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
 
# Shortcuts
QS %{QUOTEDSTRING}
 
# Log formats
SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
 
# Log Levels
LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
 

ELK 监控NGINX LOG

环境:

192.168.10.129

安装ES 9200,kibana:5601

192.168.10.131

安装了logstash:9600

登录到131上

[root@localhost patterns]# pwd
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns
将创建好的nginx_access文件上传至这个目录下

vim nginx_access

URIPARAM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
NGINXACCESS %{IPORHOST:client_ip} (%{USER:ident}|- ) (%{USER:auth}|-) \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} (%{NOTSPACE:request}|-)(?: HTTP/%{NUMBER:http_version})?|-)" %{NUMBER:status} (?:%{NUMBER:bytes}|-) "(?:%{URI:referrer}|-)" "%{GREEDYDATA:agent}"

添加logstash的nginx 日志收集配置文件

logstash grok 内置正则:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

vim /etc/logstash/conf.d/nginx.conf

input {
   file {
      path  => "/usr/local/nginx/logs/access.log"
      type  => "nginx-log"
      start_position => "beginning"
    }
}
 
filter {
    grok {
        match => { "message" => "%{NGINXACCESS}" }
    }
 
}
 
output {
   elasticsearch {
      hosts => ["192.168.10.129:9200"]
      index => "nginx_log-%{+YYYY.MM.dd}"
   }
 
}

注意:如果你的log放在/var/log下请给chmod 777 /var/log -R
添加nginx日志的可视化图形

1 添加状态码统计饼状图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2 添加一个统计pv的图形
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3 添加ip访问量前10的ip
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4 访问量趋势图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有nginx 索引需注意以下几点:
1:chmod 777 /var/log/nginx -R
2: pipiline.yml 文件
3:nginx log 里要有内容 可以用ab压测用具生成一些日志

																				马治
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值