ELK搭建
简介
ELK是elasticsearch、logstash、kibana软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。
基本组成软件:
elasticsearch:一个开源分布式搜索引擎,提供收集、分析、存储数据三大功能。
kibana:一个基于web的图形界面,用于搜索、分析和可视化存储在elasticsearch中的日志数据。
logstash:一个服务端的数据处理管道,可以从多个源中提取数据,对其进行转换,然后将其存储到Elasticsearch中。简单来说就是日志的收集、分析、过滤工具。
搭建步骤
使用版本是7.9.3,部署前我们可以先提前从官网上下载下面4个安装包:
elasticsearch-7.9.3-linux-x86_64.tar.gz
kibana-7.9.3-linux-x86_64.tar.gz
logstash-7.9.3.tar.gz
这4个组件可以部署在不同的机器上,只要机器之间是端口开放即可
本文档中elasticsearch、logstash、kibana部署在一台机器,filebeat部署在有业务服务的机器上。
创建用户和解压文件
groupadd elk
useradd elk -g elk
解压文件:
tar -zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz -C /home/elk
tar -zxvf kibana-7.9.3-linux-x86_64.tar.gz -C /home/elk
tar -zxvf logstash-7.9.3.tar.gz -C /home/elk
cd /home/elk
mv kibana-7.9.3-linux-x86_64 kibana-7.9.3
chown -R elk:elk /home/elk/elasticsearch-7.9.3
chown -R elk:elk /home/elk/kibana-7.9.3
chown -R elk:elk /home/elk/logstash-7.9.3部署elasticsearch
切换到elk用户
su - elasticsearch
cd /home/elk/修改elasticsearch.yml
cd /home/elk/elasticsearch-7.9.3/config
vi elasticsearch.yml
在文件末尾增加以下内容
# 集群初始主节点
cluster.name: “es-cluster”
network.host: 0.0.0.0
node.name: “node-1”
# discovery type
discovery.type: single-node
#discovery.seed_hosts: [“127.0.0.1”, “[::1]”]
# 设置允许所有ip可以连接该elasticsearch
network.host: 0.0.0.0
# 开启监听的端口为9200
http.port: 9200
# 增加新的参数,为了让elasticsearch-head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: “*”
# 启用密码
xpack.security.enabled: true
# 使用默认密码
xpack.security.authc.accept_default_password: true
xpack.security.transport.ssl.enabled: true
如果需要外置存储和日志,需要修改path.data和path.logs
path.data: /nfsc/cnas_csp_pase_hrx_id010797_vol1003_dev/elasticsearch
path.logs: /nfsc/cnas_csp_pase_hrx_id010797_vol1003_dev/elasticsearch_logs修改Elasticsearch占用内存
cd /home/elk/elasticsearch-7.9.3/config
vi jvm.options
修改JVM参数 :
-Xms16g
-Xmx16g启动es的时候有可能会报类似的下面的错误
【max virtual memory areas vm.max_map_count [65530] is too low】
,所以我们可以通过下面的方法去处理:
vi /etc/sysctl.conf
文件末尾添加一行
vm.max_map_count=655360
保存之后执行下面的命令加载参数
sysctl -p启动Elasticsearch
切换用户,进入bin目录启动:
cd /home/elk/elasticsearch-7.9.3/bin
./elasticsearch -d为内置账号添加密码
interactive:给用户一一设置密码
# auto:自动生成密码 cd /home/elk/elasticsearch-7.9.3/bin/ ./elasticsearch-setup-passwords interactive
验证是否启动成功
curl -XGET -u elastic ‘localhost:9200’
{ "name" : "node-1", "cluster_name" : "es-cluster", "cluster_uuid" : "8eGk8_ohRbWl8ZcNSPsFDQ", "version" : { "number" : "7.9.3", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868", "build_date" : "2020-10-16T10:36:16.141335Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
部署kibana
修改配置文件,文件位置在/home/elk/kibana-7.9.3/config目录下
su - elasticsearch
cd /home/elk/kibana-7.9.3/config
vi kibana.yml
添加es的配置,由于是都在同一台机器所以用localhost,如果是不同机器,就换成对应的ip即可
# kibana端口
server.port: 5601
# 允许所有ip访问
server.host: “0.0.0.0”
# elasticsearch所在的ip及监听的地址
elasticsearch.hosts: [“http://localhost:9200"]
elasticsearch.username: “kibana_system”
elasticsearch.password: “kibana_system”
# kibana默认创建的索引
kibana.index: “.kibana”
# 字符编码
i18n.locale: “zh-CN”
# elasticsearch加密所需配置
xpack.reporting.encryptionKey: “a_random_string”
xpack.security.encryptionKey: “something_at_least_32_characters”启动kibana
cd /home/elk/kibana-7.9.3/bin
./kibana &访问kibana
http://IP:5601/
部署Logstash
修改Logstash的YML配置文件
cd /home/elk/logstash-7.9.3/config/
vim logstash.yml
修改以下内容
# 配置自动刷新
config.reload.automatic: true
config.reload.interval: 20s
# 配置可任意地址都可访问
http.host: 0.0.0.0
http.port: 9600
# 配置es的访问密码
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: logstash_system
xpack.monitoring.elasticsearch.hosts: [“http://localhsot:9200"]修改 pipelines配置文件
- pipeline.id: gmp-logs
queue.type: persisted
path.config: “/home/elk/logstash-7.9.3/conf.d/*.config”
- pipeline.id: gmp-logs
创建日志的config文件
touch /home/elk/logstash-7.9.3/conf.d/logstash-beats.conf
写入文件内容
input {
beats {
port => 5044
}
}
filter {
grok {
match => [
“message”, “%{TIMESTAMP_ISO8601:timestamp_string}%{SPACE}%{GREEDYDATA:line}”
]
}
date {
match => [“timestamp_string”, “ISO8601”]
}
mutate {
remove_field => [message, timestamp_string]
}
}
output {
elasticsearch {
hosts => [“http://localhost:9200"]
user => elastic
password => “elastic”
}
stdout {
codec => rubydebug
}
}启动Logstash(root用户)
cd /home/elk/logstash-7.9.3/bin
sh logstash -f ../conf.d/logstash-beats.conf &