linux日志分析步骤,关于linux:graylog日志分析系统上手教程

日志剖析零碎能够实时收集、剖析、监控日志并报警,当然也能够非实时的剖析日志。splunk是功能强大且用起来最省心的,然而要免费,免费版有每天500M的限度,超过500M的日志就没法解决了。ELK零碎是最常见的,毛病是配置麻烦一些,比拟重量级。graylog是开源收费的,配置上要比ELK零碎简略。综上,本文尝试容器形式搭建一套graylog零碎,不做实时收集日志和报警的配置,只实现非实时被动接管网站日志,剖析日志各项指标的性能。

docker官网镜像国内速度我感觉慢,改成国内镜像。新建文件daemon.json如下

vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

也能够用网易镜像http://hub-mirror.c.163.com

配置完重启docker能力失效

#service docker restart

拉取如下三个镜像

docker pull mongo:3

docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10

docker pull graylog/graylog:3.3

不要急着依照网上的办法启动镜像,我开始docker启动elasticsearch,尽管显示启动胜利,但过半分钟后偷偷退出,这导致graylog在浏览器打不开。最初通过查看容器启动时的日志,发现elasticsearch对于零碎参数是有要求的,按如下批改。

在 /etc/sysctl.conf文件最初增加一行

vm.max_map_count=262144

vi /etc/security/limits.conf

* - nofile 102400

批改实现后重启零碎使变量失效。

docker启动elasticsearch时要加上参数

--ulimit nofile=65536:65536 --ulimit nproc=4096:4096

,确保容器内环境满足要求,否则在docker pa -a命令下会看到exit(78)或exit(1)的容器异样退出谬误。

查看容器启动报错最精确的办法是“docker logs -f 容器ID”这个命令,咱们不加–ulimit 参数试试

[root@bogon ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

7e4a811093d9 docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10 "/usr/local/bin/dock 6 seconds ago Up 4 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch

用下面的CONTAINER ID产看启动时的日志

[root@bogon ~]# docker logs -f 7e4a811093d9

最初会打印出

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

[2]: max number of threads [3869] for user [elasticsearch] is too low, increase to at least [4096]

[2020-08-27T06:10:25,888][INFO ][o.e.n.Node ] [WG6mVz4] stopping ...

[2020-08-27T06:10:25,903][INFO ][o.e.n.Node ] [WG6mVz4] stopped

[2020-08-27T06:10:25,903][INFO ][o.e.n.Node ] [WG6mVz4] closing ...

[2020-08-27T06:10:25,928][INFO ][o.e.n.Node ] [WG6mVz4] closed

两行too low的提醒就是容器退出的起因。

三个容器正确的启动命令如下

docker run --name mongo -d mongo:3

docker run --name elasticsearch \

-e "http.host=0.0.0.0" \

-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \

--ulimit nofile=65536:65536 --ulimit nproc=4096:4096 \

-p 9200:9200 -p 9300:9300 \

-d docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10

docker run --name graylog --link mongo --link elasticsearch \

-p 9000:9000 -p 12201:12201 -p 1514:1514 -p 5555:5555 \

-v /home/graylog/geodata:/usr/share/graylog/log \

-e GRAYLOG_HTTP_EXTERNAL_URI="http://192.168.56.106:9000/" \

-d graylog/graylog:3.3

mongo的启动没什么可说的。

elasticsearch的–ulimit必须加否则启动后退出,-p 9200:9200是治理端口,未来删除数据须要拜访这个端口。

graylog 9000端口是零碎界面,5555是开的tcp端口,用于被动接管日志数据的。

-v /home/graylog/geodata:/usr/share/graylog/log

是把本地/home/graylog/geodata挂载到容器的/usr/share/graylog/log目录,我这么配置是为了让graylog能读到GeoLite2-City.mmdb地理信息数据库,这个库是把ip和地理位置对应起来了。原本想把它拷贝到容器里,但报错

[root@localhost graylog]# docker cp ./GeoLite2-City.mmdb 151960c2f33b:/usr/share/graylog/data/

Error: Path not specified

说是要降级docker1.7到更高版本,不想降级,改成挂载办法了。如果不想挂载什么文件,-v这行参数能够去掉。

我是用命令“#docker exec -it graylog容器ID bash” 先进入容器,看到容器内/usr/share/graylog/log目录没什么货色,所以抉择挂载到这个目录的。

天文数据用于显示拜访网站的ip散布在哪个城市国家,还有世界地图的显示。须要在https://dev.maxmind.com/zh-ha…,麻烦的是这里须要注册。我下载的是GeoLite2-City_20200825.tar.gz,解压后有GeoLite2-City.mmdb,上传这个文件到Linux的/home/graylog/geodata目录,这个文件是须要挂载到容器,给graylog应用的。

不想注册请从上面链接下载

链接:https://pan.baidu.com/s/1Lovr…

niI66CkmA

提取码:bsmm

GRAYLOG_HTTP_EXTERNAL_URI的地址不要写127.0.0.1,这样如果在Linux的内部拜访,尽管能通,然而网页是空白一片,要写Linux对外的ip地址,这样在内部浏览器关上才失常。

另外graylog的启动是依赖于mongo和elasticsearch的,等其它两个都胜利启动,再启动graylog。

上面开始演示如果配置graylog零碎,并且剖析网站的Apache规范格局的日志。大略步骤如下

配置input->给input配置extractor->配置地理信息数据库->手动输出日志->剖析日志。

浏览器输出http://192.168.56.106:9000/ 用户名和明码都是admin,登陆进graylog零碎。

system->input,

点击select input右侧的下拉箭头,呈现下拉列表,抉择raw/plaintext TCP

而后点击Lanch new input,Node下拉惟一抉择给选上,Title随便起名,Port写5555,因为咱们docker启动参数写的-p 5555:5555 这两个必须保持一致。

其它不必填点击下方SAVE按钮,会主动启动该input,能够看到local inputs下方减少了方才的配置。其实当初用cat access.log | nc localhost 5555等命令给5555端口发送日志数据,数据就能够进入到graylog零碎,并且能够进行简略的搜寻了。但这种搜寻是最根底的字符串匹配,价值不大。咱们要剖析日志的各项指标,并且生成图表,必须让零碎能解析每条日志的各个field(字段或域值),例如clientip就是一个field,request也是一个field。要解析出field要给input配置extractor,点击Manager exactor。

Extractors JSON里贴入上面内容

{

"extractors": [

{

"title": "commonapache",

"extractor_type": "grok",

"converters": [],

"order": 0,

"cursor_strategy": "copy",

"source_field": "message",

"target_field": "",

"extractor_config": {

"grok_pattern": "%{COMMONAPACHELOG}"

},

"condition_type": "none",

"condition_value": ""

}

],

"version": "3.3.5"

}

最初点击 add extrators to input,显示successful即可。

到这里曾经能够正确解析日志得field了。然而如果咱们想剖析和地理位置相干的信息,还必须配置地理信息数据库,上文下载的mmdb文件。

system->configurations,最右下方有一项Geo-Location Processor,点击改我的项目下方的update按钮

配置实现,点击save。

Configurations最上方Message Processors Configuration下方表格里要把GeoIP Resolver放在表格的最下方。点击表格下方的update

鼠标按住GeoIP Resolver往下方拖,

实现后点击save。Message Processors Configuration表格的GeoIP Resolver到了最下方。

上面是手动输出日志到input了,我将access2020-07-06.log放到了Linux目录下,在目录下执行

# cat access2020-07-06.log | head -n 10000 | nc localhost 5555

命令是将log从头开始的10000行日志发送到本机的5555端口,因为graylog的input配置的也是5555端口,docker run graylog时命令参数也是-p 5555:5555,只有这三处保持一致,这个命令是肯定能胜利的。这里命令nc、ncat、netcat三个都能达到同样的成果。

导入实现后,抉择graylog最上方的search选项

上方的按钮是查问工夫范畴,这个工夫是日志导入的工夫,不是日志自身记录申请的工夫,如果要查全副间接抉择search in all messages

下方放大镜按钮就是搜寻,前方能够增加搜寻关键字,或者某个field的限度,有很多搜寻语法十分不便,点击搜寻后,不符合条件的日志记录会被去除。

下方All Messages就是符合条件的原始的日志后果。

如果想统计拜访来源于哪些城市,点击左侧边栏最下的X(field)形按钮。抉择clientip_cityname->show top values

鼠标点击右侧灰色区域,回到主界面,拜访起源的城市信息曾经在列表里了。

N/A示意的是有大量申请辨认不出ip所在的城市,这有可能是咱们的地理信息数据库不全不新,或者有些192 172这种内网地址的拜访无奈辨认地区,这里不重点探讨了。如果要剔除N/A数据,只看可辨认城市的散布,鼠标放到N/A右侧,会呈现下拉菜单的箭头,点击箭头,抉择exclude from results,N/A的数据就会去除,下面的搜寻栏内也会主动减少这个筛选条件,

留神当初的统计是剔除了N/A的数据,数据范畴理论是比全副日志范畴放大了的,这在理论利用中很有价值,很多状况下咱们统计某些指标,就是要看某个部分范畴的。上面咱们看看拜访起源城市的统计图,点击右上角下拉箭头,抉择Edit

点击左侧Date Table处下拉菜单,能够看到柱状图、饼状图、散点图等都列在外面,抉择哪个右侧就会呈现那种统计的图表。

如果要展现拜访起源在世界地图的散布,field菜单抉择clientip_geolocation->show top values,

弹出的统计表格是经纬度坐标的拜访次数。和下面图标一样,进入Date Tabel下拉菜单,最下方有world map

抉择会显示地图统计后果,放大调整地位如下图

其它指标的统计如request散布,拜访工夫散布,在field下列表里都有,依据须要按下面同样操作。地理信息数据和规范的Apache日志能够联合失效,但一些自定义的extractor是否失效是不肯定的。

番外篇

给input配置extractor,下面配置的是规范的Apache格局日志,如果日志格局是nginx或者自定义的怎么办呢?

graylog提供了给日志配置extractor的性能,假如咱们配置完input,没有给input配置extractor,间接导入日志,按如下步骤配置extractor

input界面抉择manager extractor

getstarted

load message会将刚进入的日志中的一条显示进去,点击message地位的select extractor type,示意咱们要对message也就是整条信息配置extractor,下拉菜单抉择Grok Pattern。如果日志进入工夫比拟久,load message无奈展现日志,须要通过旁边message ID的标签来搜寻日志,须要提供message ID和index,这两个参数在搜寻界面下方all message里,轻易点击一条日志数据,开展就能够看到。message ID形如4b282600-e8d2-11ea-b962-0242ac110008,index形如graylog_0。

进入Extractor configuration,外面的pattern要本人填写,能够在右侧已有的pattern抉择若干个组合,也能够本人定义,这里须要对grok和正则语法纯熟了。我这里填写的是解析nginx原生日志的pattern格局,也是网上搜寻的。填写完点击try against example,如果解析胜利,下方会表格模式列出各个field对应该条日志的值。不胜利就会报错,须要批改pattern直到不报错。

我的pattern如下

^%{IPORHOST:clientip} (?:-|%{USER:ident}) (?:-|%{USER:auth}) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NUMBER:response} (?:-|%{NUMBER:bytes})([\s\S]{1})\"(?\S+)\"([\s\S]{1})\"(?(\S+\s+)*\S+)\".*%{BASE16FLOAT:request_time}

解析胜利,Extractor title轻易起个名,点击最下方create extractor

extractor曾经胜利增加给input了,下面的action有export extractor,点击能够以json格局展现方才配置的extractor。

拷贝这个json文本,保留在本地,当前遇到nginx原生格局日志,间接通过下面的import extractor就间接应用,不必在配置grok pattern测试了。

须要阐明的是一条日志记录有没有被解析为各个field,取决于日志进入零碎时,有没有配置extractor。后配置的extractor对在之前的日志是起不到解析作用的。

如果配置完extractor,雷同格局日志只进入零碎一小部分,不要找其它起因了,起因就是pattern不对,尽管测试通过了,也配上了,然而还须要你从新批改pattern,如果pattern正确,合乎格局的日志应该全都进入零碎。

对于有些日志格局,配置grok pattern须要大量调试,graylog调试并不不便,官网grok调试器网站国内都打不开了。上面提供一个工具,能够间接粘贴日志到页面调试

链接:https://pan.baidu.com/s/1gWX4…

提取码:t6q6

windows的cmd间接java -jar GrokConstructor-0.1.0-SNAPSHOT-standalone.jar

而后浏览器拜访127.0.0.1:8080,点击matcher,下面填写日志,下方填写grok pattern,

点击go,如果胜利解析,会表格模式展现解析各个field后果。

ramdom example给出了一些常见日志的例子和对应的pattern格局。

如果要重新配置graylog和输出数据,先

docker stop $(docker ps -a -q)

进行所有容器,而后

docker rm $(docker ps -a -q)

删除所有容器,而后docker run 按程序启动三个容器,这样启动的容器是全新的,之前的配置和数据都会失落。

上面对容器的操作麻烦,能够应用

curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

装置docker-compose,将启动参数等要求写到docker-compose.yml文件里,这种形式操作命令会很简略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值