ELK安装
程序员文章站
2024-03-18 10:16:58
...
1.简介
ELK的工作流程:logstash获取日志信息,进行筛选,传给elasticsearch,然后kibana从elasticsearch获取数据,通过web界面展示出来,beat套件是负责收集的一套工具。
2.filebeat安装
依赖:jdk7
filebeat是负责收集主机上的数据,应为filebeat配置简介,依赖环境低,可以将多台filebeat收集到的日志信息,传输给logstash进行处理。
#收集配置(input_type可以设置多个)
# 定义一个挖矿者
filebeat.prospectors:
#
- input_type: log
paths:
- /data/trade/app/tradeserver/logs/*.log
- /data/trade/app/scheduleserver/logs/*.log
- /data/trade/app/bankprocessor/logs/*.log
- /data/trade/app/orgmanageserver/logs/*.log
- /data/trade/app/manageserver/logs/*.log
# 定义日子文件字符集,默认UTF8
encoding: gbk
# 指定不采集关键字的列
exclude_lines: ["DBG", "反序列化报文", "返回文本回应", "解密失败"]
# 指定采集关键字
include_lines: ["ERR", "WARN", "失败"]
# 顶多不采集文件
exclude_files: [".zip$", ".out$"]
# 定义日志的type,可以在es中根据type进行判断
document_type: app
# 对日志中添加新的行
#fields:
# level: debug
# review: 1
#如果添加此字段,fields会和type同级,否则默认为"fields":{ "level":"debug" }
#fields_under_root: true
- input_type: log
paths:
- /data/trade/www/tomcat_trade/logs/catalina.out
document_type: tomcat
# 合并行
multiline:
pattern: '^[0-9]{4}\-[0-9]{2}\-[0-9]{2}' # 将不是以日期开头的行合并
negate: true
match: after
max_lines: 50 # 最大合并行
timeout: 5s # 合并时间,防止堵塞
# 输出设置
output.redis:
hosts: ["192.168.30.135"]
key: "tradeserver"
db: 0
timeout: 5
注意:
这里redis是用来做消息队列,所有不存在大量日志撑爆你的内存。
启动
./filebeat
创建filedata索引
$ ./import_dashboards -es http://172.20.10.16:9200 -user elastic -pass changeme -only-index
执行完脚本后,会在kibana中出现一个filebeat-*的索引,我们可以更加方便的可视化这些数据。
3.安装logstash(5.2.0)
依赖:jdk8
解压完成后,手动执行下面的测试命令:
./logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
插件安装
$ ./logstash-plugin list 列出所有可以安装的插件
$ ./logstash-plugin install x-pack 安装x-pack插件
常用插件
logstash-filter-geoip # 一个本地数据库,可以查询ip信息
logstash-filter-grok # 对message进行单独的拆分,传输给es
x-pack # 统一管理插件,安装后,对连接进行用户加密,Kibana可以看到各组件的运行详情
手动创建logstash.conf文件,内容如下
# 获取本地日志文件,将日志内容写入到redis
input {
redis
{
host => "192.168.30.135"
port => "6379"
data_type => "list"
key => "tradeserver"
}
}
input {
redis
{
host => "192.168.30.135"
port => "6379"
data_type => "list"
key => "tomcat_trade"
}
}
filter {
if [type] == "log" {
# 将json格式的message解析
json {
source => "message"
#remove_field => ["offset", "message", "_score", "@version"]
}
# grok 对指定字段采用匹配,可以自己采用正则,也可以使用默认(./vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns
),测试地址:http://grokdebug.herokuapp.com/
grok {
match => [
# 使用预先编辑好的正则表达式解析
"message", "%{IPORHOST:addre} \- \- \[%{HTTPDATE:timestamp}\] \"%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} (?:%{NUMBER:bytes}|-)"
# 手动编辑正则表达式解析
#"message" => "^.*\"(?<real_ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\".*(?<upstream_ip>\"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\:[0-9]+\"$)"
]
}
# 官网nginx日志解析
# grok {
# match => { "message" => "%{NGINXACCESS}" }
# }
# 对指定字段进行地址查询,只支持ip地址
geoip {
source => "real_ip"
remove_field => ["geoip.country_code3", "geoip.country_code2", "geoip.region_code"]
#database => "/data/elk/logstash/config/GeoLiteCity.dat"
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
#convert => [ "response","integer" ]
#convert => [ "bytes","integer" ]
#replace => { "type" => "nginx_access" }
#remove_field => "message"
}
date {
match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
}
mutate {
remove_field => "timestamp"
}
}
}
input {
file {
path => ["/tmp/redis.log", "/var/log/message"]
type => "system"
start_position => "beginning" # 设置从什么位置读取,如果设置为beginning,第一次会从文件头部开始读取,后期默认从结尾开始读取
}
}
output {
if [type] == "log" {
elasticsearch {
hosts => ["192.168.30.135:9200"]
index => "logstash-nginx-access-%{+YYYY.MM.dd}"
user => elastic
password => changeme
}
}
else if [type] == "app" {
elasticsearch {
hosts => ["192.168.30.135:9200"]
index => "app-%{+YYYY.MM.dd}"
user => elastic
password => changeme
}
}
else {
elasticsearch {
hosts => ["192.168.30.135:9200"]
index => "system-%{+YYYY.MM.dd}"
user => elastic
password => changeme
}
}
}
geoip数据库下载
curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
gunzip GeoLiteCity.dat.gz
启动logstash服务
./bin/logstash -f logstash.conf
注意: 如果你的logstash不是root用户运行,那么需要运行的用户对日志文件有读取的权限
echo "www.ioart.com" >> /var/log/fjp.log
当你对/var/log/fjp.log进行追加文件的时候,在logstash的运行窗口是有输出的,如下:
{
"message" => "www.ioart.com",
"@version" => "1",
"@timestamp" => "2015-09-18T06:04:30.975Z",
"type" => "cms",
"host" => "example.com",
"path" => "/var/log/fjp.log"
}
4.安装elasticsearch
修改elasticsearch.yml配置文件
#指定索引存放位置,多个地方用,号分割
path.data: /path/to/data
path.logs: /path/to/logs
# 关闭系统调佣过滤器,详细见:https://www.elastic.co/guide/en/elasticsearch/reference/current/system-call-filter-check.html
bootstrap.system_call_filter: false
#网络监听地址,如果更改之选项,会开启强制启动检测,需要修改系统参数
network.host: 0.0.0.0
系统参数修改
- vi /etc/sysctl.conf 加入: vm.max_map_count=262144 执行 sysctl -p 使配置生效
- vi /etc/security/limits.d/20-nproc.conf #打开进程数 * soft nproc 65536
- vi /etc/security/limits.conf #打开文件数 * soft nofile 65536 * hard nofile 65536 * - memlock unlimited
插件安装
$ ./elasticsearch-plugin list
x-pack
$ ./elasticsearch-plugin install x-pack
安装x-pack模块后,连接es需要账号密码,默认账号密码为:elastic/changeme
注:
x-pack监控功能是免费的,需要去官网申请证书:https://www.elastic.co/guide/en/x-pack/current/installing-license.html
对服务进行启动之间,将上面的注释全部取消 ./elasticsearch
集群状态查看
wget http://172.20.10.17:9200/_cluster/health?pretty
访问测试
curl -X GET http://localhost:9200
{
"status" : 200,
"name" : "Jessica Drew",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.7.2",
"build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
"build_timestamp" : "2015-09-14T09:49:53Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
查看elasticsearch是否获取到了数据
curl 'http://localhost:9200/_search?pretty'
如果获取到了数据,那么就说明elasticsearch安装没有问题
5.kibana安装
修改kibana.yml配置文件
server.host: "192.168.30.135"
elasticsearch.url: "http://192.168.30.135:9200"
# 使用高德地图
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
x-pack插件安装
$ ./kibana-plugin list
aaa@qq.com
$ ./kibana-plugin install x-pack
直接在bin里面运行./kibana。
在浏览器里面输入localhost:5601进行访问 创建index的时候,记住查看elasticsearch里面的index值,一般的为logstash-* 下面是成功后查看到的日志信息
日志展示界面(lunce语法)
x-pack界面界面
上一篇: Build失败可能因为版本