ELK7.x日志系统搭建 1. elk基础搭建

ELK7.x日志系统搭建 1. elk基础搭建

基本介绍

什么是 ELK ? 通俗来讲, ELK 是由 ElasticsearchLogstashKibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,他们组成了一套完整的日志系统的解决方案。

  • Logstash 对各个服务的日志进行采集、过滤、推送。
  • Elasticsearch 存储 Logstash 传送的结构化数据,提供给 Kibana
  • Kibana 提供用户 UIweb 页面进行,数据展示和分析形成图表等。

环境介绍

暂时是准备了两个节点,版本均为7.6JDK是系统的 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

使用我们的账号密码进行登录

login

在控制台查看集群状态

es/cluster-list.png

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_HOSTES_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 , userpassword 的定义。这是因为我们现在我们是需要有用户名及密码才可以连接到 Elasticsearch 。同时我们可以创建自己的用户名及密码。我们可以参考“Elasticsearch:用户安全设置”来创建自己喜欢的账号。在这里,为了方便,我们使用elastic账号。在这里,我们是用${ES_HOST}${ES_PWD}来代表我们的Elasticsearch地址及密码。这样的好处是我们不暴露我们的密码在配置文件中。

./bin/logstash -f conf.d/system-log.conf

es/start-logstash.png

启动后会每两秒去收集系统日志到 es ,然后监控里面也能看见 logstash

es/logstash.png

在kibana中查看收集到的数据

默认的话,我们只能看见 es 的集群和 kibana 的信息,我们为了方便可以把 logstash 也添加进来

es/indexmanager.png

es/searchdata.png

es/bushiyong.png

es/discover.png

测试的话:echo test-logstash >> /var/log/syslog.1,然后间隔一会就能看见命中次数改变了

现在我们完成了基本的数据收集,我们的预期是做一个高效率的日志系统,收集我们应用中的各种日志,方便我们查看和分析,例如:mysqlredisnginx框架日志集群日志系统日志等等,我们现在完成了第一步,算是搭建了一个基础的日志系统,在接下来我们慢慢完善这个系统。现在系统主要是利用 logstash 进行日志收集,但是 logstash 消耗较大,每台安装进行收集的话成本会比较高,我们后面可以引用一些 队列 或其他 收集程序 进行优化。

参考资料

  • https://blog.csdn.net/UbuntuTouch/article/details/103767088
  • https://blog.csdn.net/qq_31547771/article/details/100665922

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏