ELK6之安装部署及基本使用
ELK可集中式、收集管理各服务器节点的日志信息,可视化统一展示,方便开发、运维技术等人员查看日志。
- 环境准备
1). ELK软件版本
elastic系列6.8.0版本,使用yum方式安装。
elastic系列软件下载地址:https://www.elastic.co/cn/downloads/past-releases
2). OS环境
CentOS7
3). JDK版本
JDK8版本
4). ELK架构实现方案
ELK + Filebeat方式实现,架构如下图:![ELK6之安装部署及基本使用]()
Filebeat 日志收集器,负责收集各服务器节点系统、应用的日志,并发送给Logstash。
Logstash 负责处理来自Filebeat的日志,处理后日志保存ElasticSearch索引。
ElasticSearch 存储来自Logstash的日志。
Kibana 从ElasticSearch搜索日志,并可视化展示。
5). ELK Stack此架构缺陷
以上架构适用于日志量不是特别大的企业,一般都能满足日志需求,前提ELK各节点(ES集群、logstash集群、kibana)做到高可用。但对于大并发量场景,产生巨大日志量,大量的日志会涌入ES集群、Logstash集群,可能ELK系统会遇到流量瓶颈。这时一般解决方案是加入消息队列(Kafka、Redis、zookeeper),数据转储,让数据有一定缓冲。 - 安装部署
1). 安装Java8yum install -y java-1.8.0-openjdk2). 配置elastic的yum仓库
导入PGP Keyrpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch配置yum源
cat >>/etc/yum.repos.d/elk.repo<<EOF [ELK-6.x] name=ELK repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF3). 安装配置ElasticSearch
yum install -y elasticsearchElasticSearch主配置文件修改 /etc/elasticsearch/elasticsearch.yml
cluster.name: preventfraud-elk #ES集群 node.name: preventfraud-node #节点 path.data: /data/elasticsearch/data #数据存储 path.logs: /data/elasticsearch/logs #log信息 network.host: 10.20.1.75 http.port: 9200 #http端口主要修改cluster集群、node节点名称,这里ElasticSearch为单节点;还有data数据节点,ElasticSearch存储大量索引信息,需要大容量磁盘空间;log日志目录;网络及端口信息。
9200端口是 http 协议端口,用于外部通信;9300端口是 tcp 协议端口,用于集群间传递信息。
elasticsearch目录文件授权chown -R elasticsearch.elasticsearch /usr/share/elasticsearch/ chown -R elasticsearch.elasticsearch /etc/elasticsearch/启动ElasticSearch服务
systemctl daemon-reload systemctl enable elasticsearch systemctl start elasticsearch -
//加入系统自启动 [root@liuns ~]# sudo systemctl daemon-reload [root@liuns ~]# sudo systemctl enable elasticsearch.service //启动/关闭服务 [root@liuns ~]# sudo service elasticsearch start [root@liuns ~]# sudo service elasticsearch stop //如果启动失败可以通过以下命令查看系统日志定位问题 [root@liuns ~]# sudo journalctl -f
-
检查elasticsearch服务启动状态,如下看到的json信息:
[root@srv-elk ~]# curl http://10.20.1.75:9200/ { "name" : "preventfraud-node", "cluster_name" : "preventfraud-elk", "cluster_uuid" : "ETKr4fyTTAG-_x2Xalnr9w", "version" : { "number" : "6.8.12", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "7a15d2a", "build_date" : "2020-08-12T07:27:20.804867Z", "build_snapshot" : false, "lucene_version" : "7.7.3", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }4). 安装配置Logstash
yum install -y logstash生成SSL证书,crt文件后面需加入到Filebeat中。
openssl req -subj '/CN=server.example.com/' -x509 -days 3650 -nodes -batch -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash.key -out /etc/pki/tls/certs/logstash.crt主配置文件/etc/logstash/logstash.yml
path.data: /data/logstash/data #数据 path.logs: /data/logstash/logs #日志目录Logstash目录文件授权
chown -R logstash.logstash /usr/share/logstash/ chown -R logstash.logstash /etc/logstash/启动Logstash服务
systemctl enable logstash systemctl start logstash处理来自Filebeat的系统、应用的配置文件目录 /etc/logstash/conf.d/,目录下文件需手动创建,如处理收集的nginx日志,创建/etc/logstash/conf.d/filebeat-nginx.conf。
5). 安装配置Kibanayum install -y kibana主配置文件 /etc/kibana/kibana.yml
server.port: 5601 #http端口,默认5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://10.20.1.75:9200"] #ES地址 logging.dest: /data/kibana/kibana.log #kibana不配置日志输出,默认输出到/var/log/message里,会导致系统日志文件越来越大,不好区分。 i18n.locale: "zh-CN" #配置中文显示Kibana目录文件授权
chown -R kibana.kibana /usr/share/kibana/ chown -R kibana.kibana /etc/kibana/chown kibana.kibana /var/log/kibana.log
启动kibana服务systemctl daemon-reload systemctl enable kibana systemctl start kibana访问Kibana地址:http://10.20.1.75:5601
![ELK6之安装部署及基本使用]()
6). 安装Filebeat
各日志目标客户端配置yum源cat >>/etc/yum.repos.d/elk.repo<<EOF [ELK-6.x] name=ELK repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF安装filebeat
yum install -y filebeat从ELK服务端copy SSL证书 logstash.crt文件到filebeat的/etc/pki/tls/certs/中。
scp server.example.com:/etc/pki/tls/certs/logstash.crt /etc/pki/tls/certs/filebeat基本配置,主配置文件 /etc/filebeat/filebeat.yml
注释掉默认的 output.elasticsearch 配置项,修改out logstash 配置输出项。output.logstash: # The Logstash hosts hosts: ["10.20.1.75:5044"] #logstash beat配置端口启动filebeat服务
systemctl enable filebeat systemctl start filebeatELK此部分安装参考:https://github.com/justmeandopensource/elk/blob/master/INSTALL-ELK-6-CentOS7.md
- ELK + Filebeat案例实施
1). Beats介绍
这里架构引入 的是 Beats 作为日志搜集器。目前 Beats 包括:
Packetbeat:搜集网络流量数据
Topbeat:搜集系统、进程和文件系统级别的CPU、内存使用情况等数据
Filebeat:搜集文件数据,这里的日志收集器使用该Filebeat
Winlogbeat:搜集 Windows 事件日志数据
Beats 将搜集到的数据发送到Logstash,经Logstash解析、过滤后,将其发送到Elasticsearch集群。作为日志收集器Logstash也可以,只是Logstash比较厚重,安装后在各服务器节点上占用系统资源高。而Filebeat比较轻量,占用系统资源几乎可忽略不计,从两者安装包的大小可直接看出差距。
2). Filebeat配置收集syslog、nginx日志
filebeat配置 /etc/filebeat/filebeat.yml# Syslog -type: log enabled: true paths: -/var/log/secure -/var/log/messages tags: ["syslog"] fields: log_type: syslog # Nginx Access log -type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /data/nginx_logs/*fzlm.org.cn-access.log json.keys_under_root: true json.overwrite_keys: true #tail_files: true #fields_under_root: true fields: service: filebeat-nginx-accesslog scan_frequency: 10s # Nginx Error log -type: log enable: true paths: - /data/nginx_logs/*fzlm.org.cn-error.log #json.keys_under_root: true #json.overwrite_keys: true #tail_files: true #fields_under_root: true fields: service: filebeat-nginx-errorlog scan_frequency: 10s #multiline.pattern: '^\[' #multiline.negate: true #multiline.match: after重启filebeat服务
systemctl restart filebeat.serviceenabled: true 配置收集该配置项里的日志,false 为不收集配置项下的日志。
tags: 定义标签
fields: 自定义属性,可以定义多个
paths: 配置收集日志文件路径
multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}\s\d{2}\:\d{2}\:\d{2}\,\d{3}' #匹配值 2020-09-23 17:31:21,756 作为log的开始
multiline.negate: true 默认为 false,匹配 pattern 的行合并到上一行;true,不匹配pattern的行合并到上一行
multiline.match: after 值 after 或 before,合并到上一行的末尾或开头
3). 配置Logstash
Logstash中创建处理syslog日志的logstash文件 /etc/logstash/conf.d/logstash-filebeat-syslog.conf#syslog log input { beats { port => 5044 client_inactivity_timeout => "1200" } } filter { if [fields][log_type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } mutate { #muate插件参考: https://www.elastic.co/guide/en/logstash/6.8/plugins-filters-mutate.html remove_field => [ "[beat][hostname]" ] remove_field => [ "[beat][name]" ] remove_field => [ "[log][file][path]" ] remove_tag => [ "beats_input_codec_plain_applied" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } output { if [fields][log_type] == "syslog" { elasticsearch { hosts => ["10.20.1.75:9200"] sniffing => true index => "syslog-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" user => "elastic" password => "******" } }创建处理nginx日志的logstash文件 /etc/logstash/conf.d/logstash-filebeat-nginx.conf
# nginx log input { beats { port => 5044 client_inactivity_timeout => "1200" } } filter {} output { if [fields][service] == "filebeat-nginx-accesslog" { elasticsearch { hosts => ["10.20.1.75:9200"] index => "nginx-accesslog-%{+YYYY.MM.dd}" } } if [fields][service] == "filebeat-nginx-errorlog" { elasticsearch { hosts => ["10.20.1.75:9200"] index => "nginx-errorlog-%{+YYYY.MM.dd}" } } }测试验证Logstash配置文件是否正确
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/logstash-filebeat-api.conf --config.test_and_exit输出 Configuration OK 字样说明配置正确。
![ELK6之安装部署及基本使用]()
重启logstash 服务systemctl restart logstash.service4). ElasticSearch查看索引
终端命令查看ES集群索引列表curl http://10.20.1.75:9200/_cat/indices?v![ELK6之安装部署及基本使用]()
后期计划安装Elasticsearch-head插件操作、查看、管理Elasticsearch集群索引信息。ElasticSearch5.0版本后需单独安装,不作为Elasticsearch的plugin安装。
5). Kibana日志可视化操作
登录Kibana,添加索引,查看日志。
管理 -> 索引模式 -> 创建索引模式 -> 填写索引名称 -> Next step -> 选择@timestamp -> 创建索引完成![ELK6之安装部署及基本使用]()
上面有几个已添加完的索引。
6). 配置Nginx访问ELK
Nginx反向代理配置kibana地址。server { listen 80; server_name server.example.com; location / { proxy_pass http://10.20.1.75:5601/; } }测试配置域名访问。
![ELK6之安装部署及基本使用]()
-
配置用户认证权限管理(X-pack)
1). ELK Stack部署完成后,默认情况Elasticsearch索引数据信息通过head插件能直接访问,无需Elasticsearch认证。只要知道Elasticsearch IP+端口信息,就能进去管理操作了,生产环境下这是非常危险的。
接下来对Elasticsearch设置安全认证操作,用到Elasticsearch的X-pack。Elastic Stack 6.3版本及之后,已经集成在一起发布,无需额外安装了,基础安全属于付费黄金版内容。Elastic Stack7 .1版本:基础安全免费。
2). Elasticsearch单机节点认证
修改Elasticsearch配置 /etc/elasticsearch/elasticsearch.yml。如果是ES集群配置用户认证,需在ES每个节点生成私钥、证书,需配置项会少多些,后面单独配置说明。xpack.security.enabled: true # 开启xpack认证机制 xpack.security.transport.ssl.enabled: true http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type #不加此配置项,Elasticsearch服务无法启动。重启elasticsearch服务
systemctl restart elasticsearch.service3). Elastic内置账户添加密码
Elastic中多个内置的用户,用来管理其他集成组件的账户,主要有:
elastic 账号:拥有 superuser 角色,是内置的超级用户。
kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
beats_system账号:拥有 beats_system 角色。用户 Beats 在 Elasticsearch 中存储监控信息时使用。
也可在kibana管理中查看内置账户:![ELK6之安装部署及基本使用]()
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive或者
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords autointeractive:为elastic用户一一添加密码
auto:自动生产密码![ELK6之安装部署及基本使用]()
接下来如果直接访问查看 elasticsearch索引服务,curl http://10.20.1.75:9200/ ,直接报错:![ELK6之安装部署及基本使用]()
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}这是因为访问ES的安全认证已生效,需带上授权的认证用户信息才可访问。
4). Kibana配置
ES开启了安全认证之后,Kibana连接ES以及访问ES都需要认证。
kibana配置文件 /etc/kibana/kibana.yml, 添加如下内容,访问的认证用户登录信息:# x-pack auth elasticsearch.username: "elastic" elasticsearch.password: "xxxxxx"重启 kibana 服务
systemctl restart kibana.service5). Logstash配置
自定义的logstash的配置文件logstash-nginx.conf,在output中增加elasticsearch认证的用户名和密码。output { if [fields][service] == "filebeat-nginx-accesslog" { elasticsearch { hosts => ["10.20.1.75:9200"] index => "nginx-accesslog-%{+YYYY.MM.dd}" } } if [fields][service] == "filebeat-nginx-errorlog" { elasticsearch { hosts => ["10.20.1.75:9200"] index => "nginx-errorlog-%{+YYYY.MM.dd}" user => "elastic" password => "******" } } }6). 测试认证
插件x-pack配置完毕之后,不能直接访问elasticsearch服务了。 通过如下方式访问elasticsearch服务,需带上用户认证信息才可访问:curl -XGET -u elastic 'http://10.20.1.75:9200/_cat/indices?v'输入elastic用户密码后:
![ELK6之安装部署及基本使用]()
登录elasticsearch,提示输入登录用户名和密码:![ELK6之安装部署及基本使用]()
登录进去发现elasticsearch集群无法连接,这时应该这样访问:http://10.20.1.75:9100/?auth_user=elastic&auth_password=xxxxxx ,URL地址要带上认证用户登录信息。
使用域名登录ELK,提示输入认证的用户信息,如下:![ELK6之安装部署及基本使用]()
7). kibana创建用户
为了方便开发人员通过kibana查看系统、应用的log信息,在kibana上创建一只读用户。
创建角色。进入 kibana 选择管理 -> 安全 -> Roles角色,创建一角色,赋予角色相关的索引,并给read权限,如下图:![ELK6之安装部署及基本使用]()
创建用户。进入 kibana 选择管理 -> 安全 -> 用户,创建一用户,配置角色选择上面创建的角色名称,如下图:![ELK6之安装部署及基本使用]()















浙公网安备 33010602011771号