ELK 监控系统搭建(2) ES安装
1. 环境
elastic search 7.11
jdk 1.8+
(注意,实际完整功能需要jdk11+,es内置有jdk11+,但是会优先采用环境变量JAVA_HOME
设置的jdk.,文中有设置使用内置JDK的方法)
本文使用的windows版本
elastic search 官方文档地址: ES官方文档
2. 安装部署
2.1 下载ES
下载地址: ES官网下载地址
大小约300M
2.2 部署
-
解压下载下来的压缩包至硬盘某目录.
-
运行
bin\elasticsearch.bat
默认访问地址为: http://localhost:9200
3. 常见问题
3.1 允许直接用IP访问
假设es部署在 172.18.30.95 上,默认只能使用 localhost 进行访问,想改为使用 172.18.30.95:9200 进行访问.
修改elasticsearch.yml
network.host: 172.18.30.95
discovery.seed_hosts: ["0.0.0.0", "[::1]"]
3.2 用户名密码设置
- 修改
elasticsearch.yml
,增加如下配置以开启x-pack验证.
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
- 重启es
- 设置用户名和密码的命令,这里需要为7个用户分别设置密码,分别是 elastic,apm_system, kibana, kibana_system,logstash_system,beats_system,remote_monitoring_user
手动设置:bin/elasticsearch-setup-passwords interactive
自动生成:bin/elasticsearch-setup-passwords auto
- 修改密码命令如下
curl -H "Content-Type:application/json" -XPOST -u 用户名:旧密码 http://172.18.30.95:9200/_xpack/security/user/elastic/_password -d "{\"password\" : \"新密码\" }"
注意: -d 参数的值是json字符串.
正确格式 "{\"password\" : \"新密码\" }"
,json中的"
替换成\"
进行转义.
以下是错误格式:
-d '{"password" : "新密码" }'
-d {"password" : "新密码" }
好多文章里这个都是错的,坑了我好久.
修改密码API说明文档: 修改密码API说明文档
3.3 控制台中文乱码
修改jvm.options
增加配置:-Dfile.encoding=GBK
编码和操作系统编码保持一致.windows中文系统为 GBK
3.4 使用内置jdk
es内置有jdk11+,但是会优先采用环境变量JAVA_HOME
设置的jdk.
启用内置jdk方法有两种:
方法1(全局性质): 将环境变量中的JAVA_HOME指向jdk11+.
方法2(只针对es): 修改 bin\elasticsearch-env.bat
if "%JAVA_HOME%" == "" (
set JAVA="%ES_HOME%\jdk\bin\java.exe"
set "JAVA_HOME=%ES_HOME%\jdk"
set JAVA_TYPE=bundled jdk
) else (
rem 把else中的内容改为和if中的一样
rem set JAVA="%JAVA_HOME%\bin\java.exe"
set JAVA="%ES_HOME%\jdk\bin\java.exe"
set "JAVA_HOME=%ES_HOME%\jdk"
set JAVA_TYPE=JAVA_HOME
)
linux下修改bin\elasticsearch-env
,内容大同小异.
4. 附录-配置文件
共有三个配置文件:
config\elasticsearch.yml
es设置
config\jvm.options
jvm的设置
config\log4j2.properties
日志设置
这三个配置文件修改后需重启ES才能生效.
4.1 elasticsearch.yml详解
路径: elasticsearch.yml
注意: 初始配置文件中仅放了极少数比较常用的配置.
#---------------------------------- 集群相关 -----------------------------------
#代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.
#es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
#cluster.name可以确定你的集群名称,当你的elasticsearch集群在同一个网段中elasticsearch会自动的找到具有相同cluster.name的elasticsearch服务.
#所以当同一个网段具有多个elasticsearch集群时cluster.name就成为同一个集群的标识.
#cluster.name: my-application
#------------------------------------节点相关------------------------------------
#
#节点名称同理,可自动生成也可手动配置
#node.name: node-1
#Add custom attributes to the node:
#node.attr.rack: r1
#
#-----------------------------------当前节点目录相关 ------------------------------------
#
#数据存储位置 (如果要存到多个目录,则使用英文逗号分隔):
#path.data: /path/to/data
#日志文件目录:
#path.logs: /path/to/logs
#
#-----------------------------------内存相关-----------------------------------
#
#Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
#Make sure that the heap size is set to about half the memory available
#on the system and that the owner of the process is allowed to use this limit.
#
#Elasticsearch performs poorly when the system is swapping the memory.
#
#----------------------------------网络设置-----------------------------------
#
#设置绑定的ip地址(也就是浏览器里访问时用的地址),可以是ipv4或ipv6的,默认为192.168.0.1.
#network.host: 192.168.0.1
#
#http端口
#http.port: 9200
#
#For more information, consult the network module documentation.
#
#--------------------------------- Discovery ----------------------------------
#
#提供一个初始的host列表,在本节点启动时进行discovery. 默认值是 ["127.0.0.1", "[::1]"]
#discovery.seed_hosts: ["host1", "host2"]
#
#你可以通过为 cluster.initial_master_nodes 参数设置一系列符合主节点条件的节点的主机名或 IP 地址来引导启动集群
#cluster.initial_master_nodes: ["node-1", "node-2"]
#
#For more information, consult the discovery and cluster formation module documentation.
#
#----------------------------------网关-----------------------------------
#
#一个集群中的N个节点启动后,才允许进行recover处理
#
#gateway.recover_after_nodes: 3
#
#For more information, consult the gateway module documentation.
#
#---------------------------------- Various -----------------------------------
#
#设置是否可以通过正则或者_all删除或者关闭索引库,默认true表示必须需要显式指定索引库名称
#生产环境建议设置为true,删除索引库的时候必须显式指定,否则可能会误删索引库中的索引库。
#
#action.destructive_requires_name: true