Elastic Stack(elk and so on)
[TOC]
旧称X-Pack,是一系列围绕elasticSearch的组件功能.比如常被提起的elk(日志采集分析)。
elk指 elasticsearch(存储+搜索)、logstash(收集)、kibana(展示) 三个组件.
几个常用组件介绍
- Filebeat: 日志采集的进程agent,负责对数据进行采集,转换,并发送到存储库.
- Logstash: 开源的
服务器端数据处理管道
,能够同时从多个来源处对数据进行采集,转换,并发送到存储库. - ElasticSearch:数据存储检索引擎,you know for search.
- Kibana: 以图表的形式呈现数据,并且具有可扩展的用户界面,全方位可视化配置和管理 Elastic Stack.
一.ElasticSearch
1.1.本体安装
由于GFW和网络不稳定的原因,采用下载安装包安装(以7.6.1为例)
下载地址:https://www.elastic.co/downloads/elasticsearch
- 解压后,配置
./config/elasticsearch.yml
#可以访问的ip地址
network.host: 0.0.0.0
#http访问端口
http.port: 8200
#同时设置集群名/节点名(集群名要一样,这样可以自动组网,节点名要不一样)
cluster.name: ES4ELK
node.name: master
#Pass an initial list of hosts to perform discovery when this node is started:
#启动节点主动发现的主机列表
discovery.seed_hosts: ["127.0.0.1"]
2.启动./bin/elasticsearch -d
-d参数表示后台启动elasticsearch.
3.查看进程 ps aux |grep elasticsearch
1.2.插件安装(ik分词器)
1.解压插件到指定位置
unzip elasticsearch-analysis-ik-7.6.1.zip -d elasticsearch/plugins/ik
2.重启es
二、安装kibana
下载地址:https://www.elastic.co/downloads/kibana
- 解压后,配置
./config/kibana.yml
server.port: 8400
server.host: "172.18.4.82"
server.name: "Entropy"
elasticsearch.hosts: ["http://localhost:8200"]
i18n.locale: "zh-CN"
2.后台启动kibana:nohup ./bin/kibana
3.查看进程使用 lsof -i:port
因为kibana实际及nodejs项目,并没有名为kibana的进程.
三、安装logstash
下载地址:
https://www.elastic.co/downloads/logstash
- 解压,配置
./config/logstash.yml
node.name: logstash-master
pipeline.id: main
http.host: "172.18.4.82"
http.port: 8500
- 启动测试
logstash是数据处理管道,所以除了主配置logstash.yml
外,启动的时候还需要使用-e
参数指定输入输出格式配置。
解压完毕使用命令bin/logstash -e 'input { stdin { } } output { stdout {} }'
启动logstash测试。
当看到输出Pipeline started
,输入任意字符串,logstash以标准输出的方式回显:
[2020-04-03T21:20:06,326][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2020-04-03T21:20:06,396][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-04-03T21:20:06,879][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
你好1
{
"@version" => "1",
"@timestamp" => 2020-04-03T13:20:06.401Z,
"host" => "v-next-cloud.sz.kingdee.net",
"message" => "你好1"
}
则表示logstash安装正确,使用ctrl+d(发送EOF)退出当前进程。
到这里logstash可以正常启动,一般的,我们filebeat来收集日志给到logstash
看到这里可以先到下一节,安装配置filebeat然后再回来继续阅读剩下的内容。安装配置filebeat
<span id="jumpback"></span>
安装好了filebeat,那么配置一个接受filebeat输入输出配置文件filebeat-pipeline.conf
:
2.2 从filebeats接受输入,输出到elasticsearch
input {
beats {
port => "5044"
}
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
filter {
mutate {
remove_field => [ "host" ]
}
}
启动命令 ./bin/logstash -f filebeats-pipeline.conf --config.test_and_exit
--config.test_and_exit
选项是测试你的配置文件写的是否正确的提示功能.当看到提示:
Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
表示配置文件正确.
配置正确则执行./bin/logstash -f filebeats-pipeline.conf --config.reload.automatic
--config.reload.automatic
选项让改变的配置在不重启服务的情况下生效。
三、安装配置filebeat
<span id="jump"></span>
1.下载解压
2.配置 filebeat.yml
filebeat.inputs:
- type: log
# Change to true to enable this input configuration.
enabled: true
# auto relase file handler ,default is 5m
#close_inactive: 5m
# scan frequency
scan_frequency: 10s
# ignore file modified before this confiture,must grater than close_inactive
ignore_older: 73h
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/ai/log/*.log
关闭配置文件中默认打开的elasticsearch输出相关配置并打开logstash相关的tcp端口配置:
output.logstash:
# The Logstash hosts this port is logstash tcp not http
hosts: ["test.tocute.cn:5044"]
then run
nohup ./filebeat -e -c filebeat.yml -d "publish" >log.log 2>&1 &
看到这里可以跳回到配置logstash的地方继续阅读 安装配置logstash
四、碰到的一些问题
1.1 启动问题:vm-max-map-count 太小报错
修复方法:
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
1.2 cluster health: yellow (1 of 2)
单点启动后,默认副本(replicas)个数是1,其实没有副本,所以设置成0.
所以设置index的number_of_replicas
为0,可以修复状态为yellow的问题.
PUT _all/_settings
{
"index": {
"number_of_replicas": 0
}
}
1.3 无法自动组成集群
拷贝安装包多个节点启动的,需要把./data目录删除,然后启动,否则无法自动组网
1.4 索引建立的时候可以设置分片(number_of_replicas),创建后不能修改
每个节点上的分片个数只能在创建索引的时候指定,一旦索引创建则不能修改。
1.5.filebeat传输到logstash碰到的一些问题
failed to parse field [host] of type [text] in document
filebeat 传输到host的字段中host是一个对象
"host" => {
"id" => "f5c67b3e099849f394957ff67349b277",
"architecture" => "x86_64",
"os" => {
"family" => "redhat",
"kernel" => "3.10.0-693.el7.x86_64",
"platform" => "centos",
"version" => "7 (Core)",
"codename" => "Core",
"name" => "CentOS Linux"
},
这里转换字段类型的时候出了问题,可以修改logstash入参出参格式文件filebeat-pipeline.conf
增加过滤器移除host字段。
filter {
mutate {
remove_field => [ "host" ]
}
}
1.6 filebeat 过一段时间自动关闭
报错:File is inactive:*.log. Closing because close_inactive of 5m
或者:Reader was closed: /var/ai/log/ai.log. Closing.
一段时间被监测的文件没有新的输入filebeat(close_inactive
)会自动关闭,默认值是5m.
当logback等系统滚动日志名称的时候,filebeat持有旧文件的句柄.
close_inactive
时间过后会自动关闭,scan_frequency
是扫描新文件的频率.
使用nohup的方式启动的话会时常挂掉,而使用service方式启动,则可以在filebeat挂掉后自动重启。
/usr/lib/systemd/system/filebeat.service
[Unit]
Description=filebeat server daemon
Documentation=/var/elk/filebeat/filebeat -help
Wants=network-online.target
After=network-online.target
[Service]
User=kduser
Group=kduser
Environment="BEAT_CONFIG_OPTS=-e -c /var/elk/filebeat/filebeat.yml"
ExecStart=/var/elk/filebeat/filebeat $BEAT_CONFIG_OPTS
Restart=always
[Install]
WantedBy=multi-user.target
其中的用户和用户分组必须正确,并且对filebeat相关文件有权限。
创建快捷方式
sudo ln -s /usr/lib/systemd/system/filebeat.service /etc/systemd/system/multi-user.target.wants/filebeat.service
启动(第一行修改xx.service文件后让其生效):
sudo systemctl daemon-reload
sudo systemctl start filebeat
网友评论