ELK7.x日志系统搭建 1. elk基础搭建
基本介绍
什么是 ELK
? 通俗来讲, ELK
是由 Elasticsearch
、 Logstash
、 Kibana
三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,他们组成了一套完整的日志系统的解决方案。
Logstash
对各个服务的日志进行采集、过滤、推送。Elasticsearch
存储Logstash
传送的结构化数据,提供给Kibana
。Kibana
提供用户UIweb
页面进行,数据展示和分析形成图表等。
环境介绍
暂时是准备了两个节点,版本均为7.6
,JDK
是系统的 openJDK
,系统为 ubuntu18.04
机器 | 安装程序 |
192.168.179.123 | Es Logstash |
192.168.179.124 | Es Kibana Logstash |
Elasticsearch集群配置
下载地址:https://mirrors.huaweicloud.com/elasticsearch/7.6.0/elasticsearch-7.6.0-linux-x86_64.tar.gz
修改配置
- elasticsearch.yml
cluster.name: elk-application #ELK的集群名称,名称相同即属于是同一个集群 node.name: node-5 #本机在集群内的节点名称 要在集群中唯一 path.data: /elk/data #数据存放目录 path.logs: /elk/logs #日志保存目录 network.host: 192.168.179.123 #监听的IP地址 http.port: 9200 #服务监听的端口 discovery.seed_hosts: ["192.168.179.124", "192.168.179.123"] # 提供集群中符合主机要求的节点的列表 服务发现种子主机 cluster.initial_master_nodes: ["192.168.179.124", "192.168.179.123"] # 可以成为master节点的机器 初始主节点 #开启 xpack 功能,如果要禁止使用密码,请将以下内容注释,直接启动不需要设置密码 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
各节点修改 config/jvm.options
文件的 -Xms4g
和 -Xmx4g
为服务器的内存一半,我的服务器时 4G
内存,所以这里改成了 2G
。当然,这个值最大不要超过 32G
。因为没有意义,具体查阅文档
- 创建es账号
useradd elastic passwd elastic mkdir -p /elk/{data,logs} chown elasticsearch.elasticsearch /elk/ -R chown elastic elasticsearch-7.6.0 -R
生成TLS 和身份验证
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
生成 TLS
和身份验证,将会在config
下生成elastic-certificates.p12
文件,将此文件传到其他节点的config
目录,注意文件权限。
启动集群,es
集群不启动,下面的添加密码操作执行不了。每个节点执行(我是在root
用户下指定适用 elastic
用户启动的,如果是在elastic
用户下执行,请直接启动)
su - elastic -c "/elasticsearch-7.6.0/bin/elasticsearch -d"
创建 Elasticsearch
集群密码,有两种方式,使用第二种。在主节点上执行,我所有的密码都设置成了 123456
第一种: bin/elasticsearch-setup-passwords auto
各用户生成随机密码。
第二种: bin/elasticsearch-setup-passwords interactive
手动定义密码,可以设置如下图所示的用户密码。
bin/elasticsearch-setup-passwords interactive
设置密码后通过浏览器去流量就需要输入账号密码了,但是在修改集群密码的过程中有可能失败,错误如下:
Unexpected response code [503] from calling PUT http://192.168.179.124:19200/_security/user/apm_system/_password?pretty Cause: Cluster state has not been recovered yet, cannot write to the [null] index Possible next steps: * Try running this tool again. * Try running with the --verbose parameter for additional messages. * Check the elasticsearch logs for additional error details. * Use the change password API manually. ERROR: Failed to set password for user [apm_system].
解决:集群中的两台服务器需要同时设置,并全部重新启动
Kibana 配置
下载地址:https://mirrors.huaweicloud.com/kibana/7.6.0/kibana-7.6.0-linux-x86_64.tar.gz
- vim config/kibana.yml
server.port: 5601 server.host: "192.168.179.124" elasticsearch.hosts: ["192.168.179.124:9200"] elasticsearch.username: "elastic" elasticsearch.password: "123456"
- 启动
sudo nohup ./bin/kibana --allow-root
使用我们的账号密码进行登录
在控制台查看集群状态
Logstash 配置
下载地址:https://mirrors.huaweicloud.com/logstash/7.6.0/logstash-7.6.0.tar.gz
配置kibana监控logstash
我们的 es
是开启了密码验证的,要想将数据推到 es
里面,需要进行配置,密码尽量不使用明文
./bin/logstash-keystore create
上面的命令将创建一个 Created Logstash keystore
我们可以利用如下的命令来创建一些key
: ES_HOST
及 ES_PWD
。
./bin/logstash-keystore add ES_HOST # http://192.168.179.124:9200/ ./bin/logstash-keystore add ES_PWD # 123456
- logstash.yml
xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: logstash_system xpack.monitoring.elasticsearch.password: "${ES_PWD}" xpack.monitoring.elasticsearch.hosts: ["${ES_HOST}"]
mkdir conf.d vi system-log.conf ###### 配置文件 ###### input { file { path => "/var/log/syslog.1" #日志路径 type => "systemlog" #类型,自定义,在进行多个日志收集存储时可以通过该项进行判断输出 start_position => "beginning" #logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有 数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,类似 less +F 的形式运行。 stat_interval => "2" #logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒 } } output { elasticsearch { hosts => ["192.168.179.124:9200"] #elasticsearch服务器地址 user => "elastic" password => "${ES_PWD}" index => "logstash-%{type}-%{+YYYY.MM.dd}" #索引名称 } }
同时,我们需要添加 hosts
, user
及 password
的定义。这是因为我们现在我们是需要有用户名及密码才可以连接到 Elasticsearch
。同时我们可以创建自己的用户名及密码。我们可以参考“Elasticsearch:用户安全设置”
来创建自己喜欢的账号。在这里,为了方便,我们使用elastic
账号。在这里,我们是用${ES_HOST}
及${ES_PWD}
来代表我们的Elasticsearch
地址及密码。这样的好处是我们不暴露我们的密码在配置文件中。
./bin/logstash -f conf.d/system-log.conf
启动后会每两秒去收集系统日志到 es
,然后监控里面也能看见 logstash
了
在kibana中查看收集到的数据
默认的话,我们只能看见 es
的集群和 kibana
的信息,我们为了方便可以把 logstash
也添加进来
测试的话:echo test-logstash >> /var/log/syslog.1
,然后间隔一会就能看见命中次数改变了
现在我们完成了基本的数据收集,我们的预期是做一个高效率的日志系统,收集我们应用中的各种日志,方便我们查看和分析,例如:mysql
、redis
、nginx
、框架日志
、集群日志
、系统日志
等等,我们现在完成了第一步,算是搭建了一个基础的日志系统,在接下来我们慢慢完善这个系统。现在系统主要是利用 logstash
进行日志收集,但是 logstash
消耗较大,每台安装进行收集的话成本会比较高,我们后面可以引用一些 队列
或其他 收集程序
进行优化。