I would rather make a custom policy because it's cleaner and makes you in control of what is happening.
Custom policy
As I understand it is a java-based daemon which you will be running so probably is sensible to make it run as system_u:system_r:logstash_t
. Then you will need to give (read only?) access to all the log files to the logstash_t domain and finally grant any additional permissions logstash may require to run.
Using the refpolicy interfaces we have something like:
policy_module(logstash, 1.0)
# define the entry point and the domain
type logstash_exec_t
init_daemon_domain(logstash_t, logstash_exec_t)
Then the logstash daemon need to be able to read log files:
logging_search_all_logs(logstash_t)
logging_getattr_all_logs(logstash_t)
logging_read_all_logs(logstash_t)
This should do most of the job, then you'll need to add the rest.
Reused policy
For what is concerning the second point I am not sure why you are not getting any write permission reported by sesearch but if you look at the sources:
# clogd.te
storage_raw_read_fixed_disk(clogd_t)
storage_raw_write_fixed_disk(clogd_t)
# storage.te
########################################
## <summary>
## Allow the caller to directly write to a fixed disk.
## This is extremely dangerous as it can bypass the
## SELinux protections for filesystem objects, and
## should only be used by trusted domains.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`storage_raw_write_fixed_disk',`
# and the rest of the stuff here...
Not really what one would want from a logging monitoring tool.
You may find something suitable to be used with the second solution, just make really sure that you are not getting extra unneeded permissions as this defeats the whole purpose of running the process inside selinux.
Hope it helps.