EFK技术选型
Elasticsearch 分布式搜索引擎,对于Filebeat收集的数据进行存储。对于多机日志ES相当于一个漏斗,通过es语句的搜素快速定位故障,提高诊断效率。
Filebeat 轻量级数据收集引擎,相对于传统的ELK,Logstash比较大,一般用他来做日志的分析格式化(二次处理),所以轻量级日志收集使用Firebeat,Friebeat 用go写的,对环境不依赖可以直接运行,而且很轻量大概 3M 多,这对部署实施时很有利。
Kibana 可视化化平台,用来做日志查看分析。可以通过从es里搜索出来的数据做可视化展示,Dashboard数据监控面板。能制作出日常图标,对数据分析十分有利。
ES部署及配置
安装elasticsearch和jre
rpm -ivh elasticsearch-6.4.1.rpm jre-8u181-linux-x64.rpm
安装ingest-csv插件
elasticsearch-plugin install file:///path/to/ ingest-csv-6.4.1.0.zip
配置ES,修改 /etc/elasticsearch/elasticsearch.yml
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
http.port: 9200
cluster.name: log-efk //加入的集群名称
node.name: tif-1-192.168.0.1 //节点名称
network.host: 192.168.0.1 //节点路径
discovery.zen.ping.unicast.hosts: [“192.168.0.1”]
bootstrap.system_call_filter: false「因为Centos6不支持SecComp」”详情“
bootstrap.memory_lock: true「防止es内存被swap」*
node.master: true
node.data: true
node.ingest: true
thread_pool.bulk.queue_size: 1000
/etc/elasticsearch/jvm.options 中,将jvm内存大小配置为系统内存一半大小
-Xms1g => -Xms32g
-Xmx1g => -Xmx32g
系统配置:/etc/security/limit.conf 中增加如下两行配置
elasticsearch - nproc 65535
elasticsearch - nofile 655350
Filebeat部署及配置
在需要采集日志的机器上部署 filebeat 服务。
tar xvfz filebeat-6.4.1-linux-x86_64.tar.gz
修改filebeat.yml如下:
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/solution/smartgate/log/.access.csv //日志文件的路径
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.elasticsearch:
hosts: [“192.168.200.129:9200”] //elasticsearch监听地址
pipeline: splog-access-authgate //在kibana中定义的pipeline的名字
worker: 2
bulk_max_size: 256
- /data/solution/smartgate/log/.access.csv //日志文件的路径
另一个多pipeline的配置:
filebeat.prospectors:
- type: log
paths: - /authgatelogs/.access.csv
fields:
type: smartgate.access - type: log
paths: - /apigatelogs/.access.csv
fields:
type: apigate.access
processors: - add_cloud_metadata:
setup.template.enabled: false
output.elasticsearch:
hosts: [“http://elasticsearch:9200/”]
pipelines: - pipeline: splog-access-authgate
when.equals:
fields.type: smartgate.access - pipeline: splog-access-apigate
when.equals:
fields.type: apigate.access
worker: 2
bulk_max_size: 256
启动filebea进程: nohup ./filebeat -e -c filebeat.yml &
Kinbana部署及配置
安装kinbana
Rpm -ivh kibana-6.4.1-x86_64.rpm
编辑/etc/kibana/kibana.yml配置文件
server.port: 5601 //监听端口
server.host: “192.168.0.1” //监听地址
elasticsearch.url: http://192.168.0.1:9200 //elasticsearch的监听地址
管理和启动kinbana服务
systemctl enable kinbana
systemctl start kinbana
打开http://192.168.0.1:5601
#在Dev Tools中增加pipeline,pipeline跟filebeat中设置的pipeline保持一致。

PUT _ingest/pipeline/splog-access-authgate
{
"description": "splog access authgate pipeline",
"processors": [
{
"csv": {
field": "message",
"columns": [
"datestamp",
"sourceName",
"targetName",
"remoteAddress",
"forwardedFor",
"staffname",
"method",
"orgHost",
"orgUrl",
"backServerAddress",
"port",
"path",
"methodName",
"duration",
"reqLength",
"resLength",
"userAgent",
"xRioSeq",
"targetXRioSeq",
"host",
"referer",
"serverIp",
"statusCode",
"errorInfo",
"authorization",
"device_id",
"device_ticket"
],
"ignore_failure": false
}
},
{
"grok": {
"field": "forwardedFor",
"patterns": [
"%{TOKEN:directRemoteAddress}"
],
"pattern_definitions": {
"TOKEN": "[.0-9]+$"
},
"ignore_failure": true
}
},
{
"grok": {
"field": "referer",
"patterns": [
"[?&]page=%{TOKEN:page}"
],
"pattern_definitions": {
"TOKEN": "[a-zA-Z/.0-9_\\-]+$"
},
"ignore_failure": true
}
},
{
"grok": {
"field": "referer",
"patterns": [
"[?&]citycode=%{TOKEN:citycode}"
],
"pattern_definitions": {
"TOKEN": "[a-zA-Z/.0-9_\\-]+$"
},
"ignore_failure": true
}
},
{
"gsub": {
"field": "forwardedFor",
"pattern": ",",
"replacement": ", "
}
},
{
"gsub": {
"field": "backServerAddress",
"pattern": ",",
"replacement": ", "
}
},
{
"grok": {
"field": "orgUrl",
"patterns": [
"%{TOKEN:orgPathName}"
],
"pattern_definitions": {
"TOKEN": "[^?]+"
},
"ignore_failure": true
}
},
{
"grok": {
"field": "backServerAddress",
"patterns": [
"%{TOKEN:directBackServer}"
],
"pattern_definitions": {
"TOKEN": "[.0-9]+$"
},
"ignore_failure": true
}
},
{
"grok": {
"field": "datestamp",
"patterns": [
"%{TOKEN:second}"
],
"pattern_definitions": {
"TOKEN": "[^.]+"
},
"ignore_failure": true
}
},
{
"date": {
"field": "datestamp",
"target_field": "@timestamp",
"formats": [
"yyyy-MM-dd HH:mm:ss.SSS",
"ISO8601"
],
"timezone": "Asia/Shanghai",
"ignore_failure": true
}
},
{
"date_index_name": {
"field": "@timestamp",
"index_name_prefix": "splog-access-authgate-",
"index_name_format": "yyyy.MM.dd",
"date_rounding": "d",
"timezone": "Asia/Shanghai",
"ignore_failure": true
}
},
{
"gsub": {
"field": "source",
"pattern": "^.*/",
"replacement": ""
}
},
{
"remove": {
"field": "datestamp"
}
},
{
"remove": {
"field": "beat.hostname"
}
},
{
"remove": {
"field": "beat.version"
}
},
{
"remove": {
"field": "message"
}
}
],
"on_failure": [
{
"set": {
"field": "parse_err_message",
"value": ""
}
},
{
"set": {
"field": "_index",
"value": "splog-parse-failed"
}
}
]
}
#在Dev Tools中增加template:
PUT _template/splog-access
{
"order": 0,
"version": 1,
"index_patterns": [
"splog-access-*",
"xtbg-splog-access-*",
"splog-req-*"
],
"settings": {
"index": {
"refresh_interval": "30s",
"number_of_shards": "6",
"translog": {
"sync_interval": "5s",
"durability": "async"
},
"number_of_replicas": "0"
}
},
"mappings": {
"doc": {
"dynamic_templates": [
{
"fields": {
"path_match": "fields.*",
"mapping": {
"type": "keyword"
},
"match_mapping_type": "string"
}
},
{
"strings_as_keyword": {
"mapping": {
"ignore_above": 4096,
"type": "keyword"
},
"match_mapping_type": "string"
}
}
],
"properties": {
"duration": {
"type": "long"
},
"@timestamp": {
"type": "date"
},
"forwardedFor": {
"type": "text"
},
"backServerAddress": {
"type": "text"
},
"reqLength": {
"type": "long"
},
"@version": {
"type": "keyword"
},
"errorInfo": {
"type": "text"
},
"resLength": {
"type": "long"
},
"userAgent": {
"type": "text"
}
}
}
},
"aliases": {}
}
在Management-Kibana-Index Patterns中加入Index Pattern,即可在Discover中看到日志数据。
